Soy bastante nuevo en Ninject, pero he logrado utilizarlo para DI mediante un proveedor personalizado.Ninject, proveedores y Activator.CreateInstance
La unión se inicializa como sigue
kernel = new StandardKernel();
kernel.Bind<IPatientRecordLocator>().ToProvider<PatientRecordLocatorProvider>();
y en el proveedor personalizado me llaman Activator.CreateInstance al igual que
protected override IPatientRecordLocator CreateInstance(IContext context)
{
var name = ConfigurationManager.AppSettings["PatientRecordLocator"];
var typeName = name.Split(',')[0];
var assemblyName = name.Split(',')[1];
return Activator.CreateInstance(assemblyName, typeName).Unwrap() as IPatientRecordLocator;
}
(sí, soy consciente de que no hay control de errores, etc. en el código anterior :))
y todo esto funciona como un encanto.
Ahora, el problema al que me enfrento es cuando introduzco una nueva clase que deseo inyectar en instancias de IPatientRecordLocator. El problema ocurre cuando agrego un constructor como el siguiente a, p. una de estas clases
[Inject]
public MockPatientRecordLocator (IContactAdapter contactAdapter)
{
...
}
Entonces, para Activator.CreateInstance para trabajar también tengo que añadir un constructor sin parámetros a MockPatientRecordLocator clase, es decir
public MockPatientRecordLocator()
{
}
Por lo tanto, mi pregunta es: ¿cómo puedo hacer Ninject Inyectar una instancia de una clase que implemente IContactAdapter en, por ejemplo MockPatientRecordLocator? Intenté inyectar el método, pero fue en vano.
que se olvidó de explicar que lo que estoy tratando de lograr es una especie de inyección encadenado en una instancia de la clase PatientRecordSummary se inyecta con una instancia de MockPatientRecordLocator (mediante la inyección de constructor) y dicha instancia de MockPatientRecordLocator debe conseguir inyectado con una instancia de IContactAdapter (de nuevo usando inyección de constructor (si es posible)). La primera parte de la cadena funciona, la segunda no.
Hola Ruben, gracias por su ayuda (y complemento). Intentando lo mejor que puedo :-) En esta configuración en particular, no usé módulos, pero cambiaré a usarlos para poder usar Bind() más fácilmente. – norgie