2009-06-29 8 views
12

tengo una clase que toma una matriz de interfaces en el constructor:castillo de Windsor no puede inyectar una gran variedad de tipos de interfaz

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

Mi registro envase se ve de la siguiente manera:

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

I tiene varias implementaciones de IBar, y el contenedor puede ubicarlas definitivamente, ya que el ServiceLocator.Current.GetAllInstances<IBar>() funciona bien.

Sin embargo, si trato de obtener una instancia de IFoo, arroja una excepción que dice que no pudo satisfacer la deoendencia ... "que no se registró".

Si cambio el constructor para tomar una sola instancia de IBar, funciona bien.

¿Alguna idea?

Respuesta

23

Añadir la ArrayResolver:

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

Véase también el FAQ Windsor: http://using.castleproject.org/display/IoC/FAQ –

+0

Se puede hacer esto a través del archivo de configuración en su lugar? –

+0

@Ben: actualmente no, pero puede sugerirlo en la uservoice: http://castle.uservoice.com: "Agregar subproponedores a través de xml config" –

Cuestiones relacionadas