2009-06-29 18 views
12

Ben yapıcı içinde arayüzleri bir dizi götüren bir sınıfı:Windsor Castle arayüz türleri dizisi enjekte edemez

container.Register(AllTypes.Pick().FromAssemblyNamed("...") 
        .WithService.FirstInterface()); 
container.AddComponent("foo", typeof(IFoo<,>), typeof(Foo<,>)); 

I şöyledir:

public class Foo<T1, T2> : IFoo<T1, T2> 
{ 
    public Foo(IBar[] bars) 
    { 
     ... 
    } 
} 

Benim konteyner kaydı görünüyor IBar'ın birkaç uygulaması vardır ve kapsayıcıyı, ServiceLocator.Current.GetAllInstances<IBar>() numaralı telefonun düzgün çalıştığı şekilde kesin olarak bulabilir.

Ancak, bir IFoo örneğini almaya çalışırsam, "kayıtlı olmayan" deoendisiteyi tatmin edemeyeceğini söyleyen bir istisna atar.

Yapıcıyı tek bir IBar örneği olarak değiştirirseniz, iyi çalışır.

Herhangi bir fikrin var mı?

container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel)); 

cevap

23

ArrayResolver ekle?
+1

da Windsor sine bakın:: http://using.castleproject.org/display/IoC/FAQ –

+0

yerine bu yapılandırma dosyası aracılığıyla yapılabilir –

+0

@Ben: şu anda değil, ama uservoice üzerinde önerebilirsiniz: http://castle.uservoice.com: "xml config üzerinden altkullanıcılar ekle" –

İlgili konular