Dependency Injection – część druga

W poprzedniej notce pisałem o swojej implementacji Dependency Injection, którą użyłem w swojej aplikacji. Po chwili dopiero zauważyłem pewną wadę mojego podejścia. Wszystkie instancje są tworzone przy inicjalizacji obiektu ApplicationModule. Ponieważ bez sensu byłoby tworzenie zawsze wszystkich instancji, nawet tych, które nie będą potrzebne podczas konkretnego uruchomienia aplikacji postanowiłem to zmienić.

Wszystkie zmiany, które zrobiłem w modyfikacji mojej wersji DI dokonałem we wcześniej wspomnianym obiekcie ApplicationModule.

Poniżej przedstawiam listing tego obiektu.

Zmiany, których dokonałem to:

  • Mapa
    Wcześniej mapa przechowywała pary Klasa-Instancja. W obecnej implementacji mapa zawiera pary Klasa na krotkę zawierającą funkcje oraz instancje. Dokładniej mówiąc krotka zawiera funkcje tworzącą daną instancje na konkretną instancje klasy.
  • Metoda tworząca instancje wstrzykiwanej klasy
    Wcześniej metoda zwracała nową instancje danej klasy. W chwili obecnej zwraca funkcje bezparametrową, która po wywołaniu stworzy instancje klasy.
  • Blok inicjalizacyjny
    Do mapy wsadzamy wszystkie pary Klasa-Krotka, których będizemy chcieli używać. Jako drugą wartość krotki ustawiamy null, ponieważ nie chcemy jeszcze tworzyć instancji klasy.
  • Metoda wire
    We wcześniejszym podejściu metoda ta pobierała z mapy instancje żądanej klasy i ją zwracała. W chwili obecnej sprawdzamy czy druga wartość krotki dla żądanej klasy jest null’em. Jeżeli jest to tworzymy nową instancje żądanej klasy i ja zapisujemy w mapie, a następnie zwracamy stworzoną instancje. W przypadku gdy druga wartość krotki nie jest null’em to oczywiście oznacza, że instancja została stworzona wcześniej i właśnie ona zostanie zwrócona.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *