Considere el siguiente código.Inyectar arreglo de interfaces en Ninject
public interface IFoo { }
public class Bar
{
public Bar(IFoo[] foos) { }
}
public class MyModule : NinjectModule
{
public override void Load()
{
Bind<IFoo[]>().ToConstant(new IFoo[0]);
// ToConstant() is just an example
}
}
public class Program
{
private static void Main(string[] args)
{
var kernel = new StandardKernel(new MyModule());
var bar = kernel.Get<Bar>();
}
}
Cuando intento ejecutar el programa obtengo la siguiente excepción.
error al activar IFoo
No hay enlaces de juego están disponibles, y el tipo no es auto-enlazable. camino
Activación:
2) Inyección de dependencia IFoo en Foos de parámetros de constructor de tipo Bar
1) Solicitud de Bar
¿Cómo se puede inyectar/se unen a una matriz en Ninject?
Gracias por su tiempo.
Editar:
Mis importaciones de aplicaciones de datos que se crea por un componente de terceros. El proceso de importación aplica diferentes tipos de filtros (por ejemplo, implementaciones de diferentes interfaces de filtro). Las reglas para el filtrado cambian con bastante frecuencia, pero son demasiado complejas para ser realizadas con una configuración pura (y un filtro maestro).
Quiero hacer que agregar/editar filtros sea lo más fácil posible. Lo que tengo es un ensamblaje donde se encuentran todas las implementaciones de filtros. Intenté vincular cada interfaz de filtro con el siguiente método (que proporciona una instancia de cada implementación de ese tipo de filtro). Básicamente, quiero evitar la necesidad de cambiar mi módulo Ninject cuando agrego/elimino clases de filtro.
private IEnumerable<TInterface> GetInterfaceImplementations<TInterface>(IContext context)
{
return GetType().Assembly.GetTypes()
.Where(t => typeof (TInterface).IsAssignableFrom(t) && IsConcreteClass(t))
.Select(t => Kernel.Get(t)).Cast<TInterface>();
}
Me siento un poco culpable en términos de eludir el mecanismo DI de los contenedores. ¿Es esto una mala práctica? ¿Hay una práctica común para hacer tales cosas?
Resolución:
utilizo una clase contenedora como bsnote sugirió.
he escogido este como la respuesta ya que es más detallada. Gracias (1) a bsno ¡Te, también! –