Kontener DI – kolekcje

W zmaganiach z kontenerem AutoFac, natrafiłem na możliwość wstrzykiwania całych kolekcji implementujących ten sam interfejs.

Dzięki takiemu podejściu udało mi się znacznie uprościć kod algorytmu. Niniejszym dzielę się swoimi spostrzeżeniami oraz przykładową poglądową implementacją rozwiązania jakie zastosowałem.

 

Interfejs

Bardzo prosty interfejs IOnlyForTest zawierający szkielet metody Calc przyjmującej dwa parametry a i b, następnie zwracający wynik operacji.

Klasa implementująca IOnlyForTest zostanie automatycznie wstrzyknięta jako jeden z elementów kolekcji.

 

Rejestrowanie klas w module kontenera AutoFac

Moduł rejestrowania klas implementujących interfejs IOnlyForTest.

Można by tutaj powiedzieć, iż własnie budowane są kolejne elementy kolekcji jaka zostanie wstrzyknięta do docelowego obiektu.

 

Przykładowe klasy implementujące interfejs

Pierwsza z klas zwraca wynik dodawania liczby a i b;

Druga funkcjonuje analogicznie z tym, iż zwraca różnicę.

Obie są rejestrowane przez moduł kontenera AutoFac.

 

Użycie wstrzykiwania kolekcji

Na koniec pozostaje implementacja klasy TestEnumerable. To właśnie w niej zostanie wstrzyknięta kolekcja zawierająca listę zarejestrowanych klas implementujących IOnlyForTest.

 

Koniec

Niniejszy kod nie przedstawia żadnej logicznej implementacji, jest to tylko przykład testowy. Głównym jego założeniem jest przedstawienie sposobu łączenia klas implementujących ten sam interfejs w kolekcję. I następnie użycie ich w pętli.

Mam nadzieję, iż ten wirtualny przykład znajdzie zadowolonego odbiorcę.