Zastanawiałem się trochę nad tym, w jaki sposób zastrzyk zależności mógłby być lepiej zintegrowany bezpośrednio z językiem C #. Wymyśliłem potencjalne rozwiązanie, o którym chciałbym poznać Twoją opinię. Nie używałem wielu struktur wstrzykiwania zależności, więc może być coś, co przeoczam
W każdym razie chodzi o to, aby móc zadeklarować właściwości jako „wstrzykiwalne” za pomocą słowa kluczowego. Kiedy instancja obiektu jest tworzona, a ta właściwość nie jest inicjowana przez konstruktor lub inicjalizator obiektu, żąda instancji tego typu właściwości od jakiejś usługi globalnej.
Podobnie rejestrujesz procedury obsługi różnych typów dla tej usługi, aby można było utworzyć instancję typu wstrzykiwanej właściwości.
Zaletą korzystania z tego rodzaju architektury IMO jest to, że jest dość elastyczna i łatwa w użyciu. Minusem jest to, że za każdym razem, gdy inicjujesz klasę z zastrzykiem, może być pewne obciążenie wywołaniem singletona.
Z drugiej strony jest to problem tylko dla klas, które często są tworzone w rozwiązaniach o wysokiej wydajności, więc nie powinno to stanowić większego problemu. Być może w takich przypadkach możesz użyć jakiejś fabryki.
Myśl, problemy, pytania, lepsze pomysły?
Kod
public class SomeClass
{
public SomeClass()
{
//implicit behavior if Animal is not set in constructor or initializer
this.Animal = GlobalInjector.Get(this,typeof(Mammal))
}
public injectable Mammal Animal
{
get;
set;
}
}
GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));