Spis treści
Aplikacja POS korzysta z mechanizmu kontenerów Unity. Pozwala on na łatwy i szybki dostęp do wszystkich zarejestrowanych wcześniej serwisów w dowolnej klasie ViewModelu oraz View. Rozwiązuje też wszystkie zależności pod warunkiem, że zostały one również wcześniej zarejestrowane. Przykładem może być każdy widok, który pozyskiwany jest z kontenera z jednoczesnym wstrzyknięciem w jego konstruktorze zależnego view-modelu. Jest to możliwe ponieważ każdy view-model jest wcześniej rejestrowany w kontenerze (patrz Rejestracja widoków do nawigacji oraz zarządzania wyglądem). Z kolei temu viewmodelowi wstrzykiwane są inne wymagane serwisy, które są mu niezbędne (pod warunkiem, że zostały wcześniej zarejestrowane).
Pobieranie serwisów z kontenera
Pobieranie instancji wybranego serwisu możemy dokonać na trzy sposoby:
- Zdefiniowanie publicznej właściwości z dodanym atrybutem Dependency z przestrzeni Practices.Unity.
[Dependency] public IProductsService ProductsService { get; set; }
- Wstrzyknięcie instancji w konstruktorze viewmodelu, poprzez prostą deklarację parametru.
public OrdersViewModel(IProductService productService) { … }
- Wywołanie metody Resolve na obiekcie IUnityContainer dostępnym w klasie ViewModelBase pod właściwością Container.
var productsService = Container.Resolve<IProductsService>();
Utworzenie instancji serwisu wykonywane każdorazowo w chwili pobrania go z kontenera. Wyjątkiem jest przypadek serwisu zarejestrowanego jako singleton, którego instancja tworzona jest tylko raz podczas pierwszej próby pobrania.
Rejestracja własnych serwisów w kontenerze
Rejestracji serwisu możemy dokonać w dowolnym momencie, wszędzie tam gdzie mamy dostęp do obiektu IUnityContainer. Jeżeli chcemy mieć pewność, że serwis będzie dostępny od samego początku, należy go zarejestrować w klasie Module. Taka sytuacja ma miejsce dla wszystkich view-modeli. Serwis możemy zarejestrować na podstawie jego interfejsu. Jeżeli klasa serwisu nie ma interfejsu to nie trzeba jej rejestrować, chyba że chcemy, aby była dostępna jako singleton.
W celu rejestracji serwisu w klasie Module należy skorzystać z metody
Register<TInterface,TClass>(), gdzie TInterface to nazwa interfejsu, a TClass nazwa klasy implementującej ten interfejs. Dodatkowe parametry:
- singleton (bool) – parametr określający czy pobierana z kontenera instancja ma być każdorazowa tworzona na nowo czy zwracana zawsze ta sama instancja. Domyślnie wartość tego parametru ustawiona jest na false
Poniżej zaprezentowano przykład rejestracji w klasie Module serwisu jako singleton, serwis jest klasy CustomService i implementuje interfejs ICustomService:
Register<ICustomService, CustomService>(true);
Jeżeli zależy nam na tym, aby zarejestrowany serwis od razu został zainstancjonowany, a zawiera zależności które będą wstrzykiwane automatycznie, musimy się upewnić, że będzie to możliwe. W przypadku, gdy serwis jest zależny od innego, który istnieje w innym module, musimy się upewnić, że został on już zarejestrowany. Aby mieć tego gwarancję instancjonowanie (pobranie z kontenera) należy wykonać wewnątrz metody AfterAllModulesLoaded (znajdującej się w ModuleBase).
Lista dostępnych serwisów w POS
Serwisy możemy podzielić na podstawowe dotyczące rdzenia aplikacji POS oraz biznesowe dotyczące logiki działania biznesowego aplikacji.
Do listy serwisów podstawowych zaliczamy:
- IMonitService (Comarch.POS.Presentation.Core.Services)
Serwis umożliwiający wyświetlanie komunikatów (informacyjnych oraz pytających) – więcej w artykule Notyfikacje i Komunikaty
- INotificationService (Comarch.POS.Presentation.Core.Services)
Serwis umożliwiający wyświetlanie notyfikacji – więcej w artykule Notyfikacje i Komunikaty
- IViewManager (Comarch.POS.Presentation.Core.Services)
Klasa pozwalająca na sterowanie widokami (otwieranie i zamykanie) – więcej w artykule Nawigacja między widokami
- ILoggingService (Comarch.POS.Library.Logging)
Serwis pozwalający na zapis informacji do pliku loga
- ISecurityService (Comarch.POS.BusinessLogic.Interfaces.Security)
Serwis odpowiedzialny za autentykację i autoryzację użytkownika POS – więcej w artykule Weryfikacja uprawnień
- IAutorizationService (Comarch.POS.Presentation.Base.Services)
Serwis umożliwiający walidację uprawnień zalogowanych użytkowników POS – więcej w artykule Weryfikacja uprawnień
Do listy serwisów biznesowych zaliczamy:
- IConfigurationService (Comarch.POS.Library.Settings)
Serwis pozwalający na uzyskanie dostępu do konfiguracji aplikacji
- IFiscalizationService (Comarch.POS.Presentation.Fiscalization.Services)
Serwis fiskalizacji
- ISynchronizationService (Comarch.POS.Synchronization.Interfaces)
Serwis synchronizacji
- IPrintoutManager (Comarch.POS.Presentation.Core.Services)
Serwis wydruku
- Oraz wszystkie pozostałe znajdujące się w przestrzeni Comarch.POS.BusinessLogic.Interfaces