Serwisy

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

 

Czy ten artykuł był pomocny?