Mam następujących klas:Jak wstrzykiwać właściwość zależność używając MKOl Jedności
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() ";
}
}
używam jedności IoC, moja rejestracja wygląda następująco:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
Kiedy rozwiązać wystąpienie ServiceA
, serviceB
będzie null
. Jak mogę rozwiązać ten problem?
Jeśli masz wybór między konstruktorem a iniekcją własności, myślę, że powinieneś wybrać wtrysk konstruktora. Zastrzyk własności sprawi, że klasa będzie zależna od jedności lub od jakiegoś innego "pamiętającego" rozmówcy, że musi dostarczyć tę zależność. Wstrzyknięcie Konstruktora czyni to oczywistym dla każdego, kto próbuje użyć klasy, że zależność jest istotna dla klasy. – Carlos
A jeśli klasa ma wiele zależności, to nie wszystkie są potrzebne w niektórych połączeniach? Czy wszystkie zostaną utworzone? Czy będą one tworzone tylko podczas uzyskiwania dostępu, jak wyżej: serviceB.method()? @ Collos – Legends
@Legends wszystkie twoje zależności zostaną wstawione i wstrzykną, gdy ServiceA zostanie utworzona, nawet jeśli nie użyjesz ich we wszystkich metodach. Unity nie obsługuje leniwych instancji po wyjęciu z pudełka, ale można je dodać jako rozszerzenie: http://pwlodek.blogspot.hu/2010/05/lazy-and-ienumerable-support-comes-to.html – nemesv