Xamarin.Forms + Prism – Dependency Injection

Wstęp

Dzisiejszy post będzie troszkę nawiązywał do poprzedniego, o dependency injection link.Xamarin Forms nie posiada żadnego wbudowanego mechanizmu do dependency injection więc aby to osiągnąć potrzebujemy dodatkowych bibliotek. Ja w swoim projekcie korzystam z Prism. Autorzy biblioteki utworzyli warstwę abstrakcji Prism.Ioc – jest to zestaw interfejsów do obsługi kontenerów. Dzięki temu rozwiązaniu mogą powstawać pakiety dla kontenerów np. Unity, Ninject itp. Oczywiście jest to tylko teoria, założenie jest słuszne, niestety nie wszystkie kontenery są kompatybilne o czym możemy poczytać w dokumentacji Prism na GitHub – link. Jak już zdecydujemy z którego kontenera chcemy skorzystać to musimy zainstalować odpowiedni pakiet nuget. Ja korzystam z Unity dlatego też przykład będzie w oparciu o ten kontener. Instalujemy paczkę Prism.Forms.Unity. Przedstawiałem już wcześniej jak przygotować projekt do korzystania z Prism – link. Pamiętajmy, że każdy widok z którego chcemy korzystać, musi być zarejestrowany w kontenerze, w metodzie RegisterTypes.

Zależności

Wszystkie zależności rejestrujemy również w metodzie RegisterTypes. Utwórzmy repozytorium IHomeRepository i dodajmy je do naszego HomeViewModelu. Utwórzmy jedną właściwość title i odczytajmy ją z repository.

Ja w przykładzie rozszerzyłem mój view model o interfejs INavigationAware żeby mieć dostęp do metod nawigacji. Kolejny krok to zarejestrowanie IHomeRepository, w App.xaml.cs w metodzie RegisterTypes. W zależności od potrzeb, możemy zarejestrować typ zwyczajnie, jako singleton, a nawet możemy podać konkretną instancję jaka ma być przypisana. TestHomeRepository zwraca po prostu tekst Hello Unity!

Po wykonaniu powyższych kroków, Prism podczas tworzenia obiektu HomeViewModel oraz innych view modeli automatycznie przypisze zarejestrowane wcześniej właściwości.

Przykładowy kod jest dostępny na GitHub – link

Jedna myśl na temat “Xamarin.Forms + Prism – Dependency Injection”

  1. Pingback: dotnetomaniak.pl

Dodaj komentarz

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