Tengo las siguientes clases:cómo inyectar la propiedad de dependencia utilizando Ioc Unidad
public interface IServiceA
{
string MethodA1();
}
public interface IServiceB
{
string MethodB1();
}
public class ServiceA : IServiceA
{
public IServiceB serviceB;
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
public class ServiceB : IServiceB
{
public string MethodB1()
{
return "MethodB1() ";
}
}
utilizo la Unidad para la COI, mi registro se ve así:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
Cuando resuelvo un ejemplo ServiceA
, serviceB
será null
. ¿Cómo puedo resolver esto?
Si tiene la opción entre el constructor y la propiedad de inyección, creo que debe elegir la inyección de constructor. La inyección de propiedad hará que la clase dependa de la unidad o de que otra persona "recuerde" que necesita proporcionar esa dependencia. La inyección de constructores deja en claro a cualquiera que intente usar la clase que la dependencia es esencial para la clase. – Carlos
Y si la clase tiene múltiples dependencias, ¿no son todas necesarias en ciertas llamadas? ¿Serán todos instanciados? ¿O solo se crearán instancias cuando se acceda, como se indicó anteriormente: serviceB.method()? @Carlos – Legends
@Legends Todas sus dependencias se instalarán e inyectarán cuando se cree el ServiceA incluso si no las usa en todos sus métodos. Unity no es compatible con la instanciación diferida de fábrica, pero se puede agregar como extensión: http://pwlodek.blogspot.hu/2010/05/lazy-and-ienumerable-support-comes-to.html – nemesv