Die POS-Anwendung nutzt den Mechanismus der Unity-Container. Dies ermöglicht den einfachen und schnellen Zugriff auf alle zuvor registrierten Services in jeder ViewModel- und View-Klasse. Es löst auch alle Abhängigkeiten auf, vorausgesetzt, sie wurden zuvor auch registriert. Ein Beispiel wäre jede Ansicht, die aus einem Container extrahiert wird und gleichzeitig in den Konstruktor des abhängigen View-Modells injiziert wird. Dies ist möglich, weil jedes ViewModel zuvor in dem Container registriert wird (siehe unten: Eigene Ansichten im Container registrieren). Im Gegenzug werden dem ViewModel andere Services injiziert, die dem nötig sind (vorausgesetzt, sie sind bereits registriert).
Services aus dem Container extrahieren
Es gibt drei Möglichkeiten, eine Instanz des ausgewählten Service abzurufen:
- Eine öffentliche Eigenschaft mit dem hinzugefügten Dependency-Attribut aus dem Practices.Unity Bereich definieren.
[Dependency] public IProductsService ProductsService { get; set; }
- Eine Instanz im Konstruktor des ViewModels injizieren, indem ein Parameter definiert wird
public OrdersViewModel(IProductService productService) { … }
- Die Resolve-Methode auf dem IUnityContainer-Objekt, das in der ViewModelBase-Klase unter der Eigenschaft Container verfügbar ist, aufrufen.
var productsService = Container.Resolve<IProductsService>();
Die Erstellung einer Serviceinstanz erfolgt bei jedem Extrahieren aus einem Container. Eine Ausnahme ist der Service, der als singleton registriert wird, dessen Instanz nur einmal beim ersten Download nur einmal erfasst wird.
Eigene Services im Container registrieren
Ein Service kann jederzeit registriert werden, wenn Sie Zugriff auf IUnityContainer haben. Wenn Sie sicher sein möchten, dass der Service von Anfang an verfügbar ist, müssen Sie ihn in der Module-Klasse registrieren. Diese Situation ist für alle View-Models der Fall. Ein Service kann auch auf Basis von seiner Schnittstelle registriert werden. Wenn die Service-Klasse keine Schnittstelle hat, muss sie nicht registriert werden, es sei denn, Sie möchten, dass sie als Singleton verfügbar ist.
Um einen Service in der Module-Klasse zu registrieren, nutzen Sie die Methode
Register<TInterface,TClass>(), wobei TInterface der Name der Schnittstelle und TClass der Name der Implementierungsklasse für diese Schnittstelle ist. Zusätzliche Parameter:
- singleton (bool) – der Parameter bestimmt, ob die aus dem Container extrahierte Instanz jedes Mal neu erstellt werden soll oder ob immer die gleiche Instanz zurückgegeben wird. Standardmäßiger Wert ist false.
Im Folgenden wird ein Beispiel für die Registrierung einer CustomService-Klasse in der Module-Klasse, die die Schnittstelle ICustomService als Singleton implementiert, dargestellt:
Register<ICustomService, CustomerService>(true);
Wenn der registrierte Service sofort instanziiert werden soll und wenn er Abhängigkeiten enthält, die automatisch injiziert werden, müssen Sie sicher sein, dass dies möglich ist. Wenn ein Service von einem anderen abhängt, der in einem anderen Modul vorhanden ist, müssen Sie sicher sein, dass er bereits registriert wurde. Um dies zu gewährleisten, muss die Instanziierung (Abruf aus dem Container) innerhalb der Methode AfterAllModulesLoaded (in ModuleBase) erfolgen.
Liste verfügbarer Services in POS
Die Services können in grundlegende, also solche, die den Kern der POS-Anwendung betreffen, und Geschäftsservices, die sich auf auf die Geschäftslogik der Anwendung beziehen, aufteilen.
Zu den grundlegenden Services gehören:
- IMonitService (Comarch.POS.Presentation.Core.Services)
Service zur Anzeige von Meldungen (Informationen und Fragen) – mehr dazu im Kapitel Meldungen
- INotificationService (Comarch.POS.Presentation.Core.Services)
Service zur Anzeige von Benachrichtigungen – mehr dazu im Kapitel Benachrichtigungen
- IViewManager (Comarch.POS.Presentation.Core.Services)
Klasse zur Steuerung von Ansichten (Öffnen und Schließen) – mehr dazu im Kapitel Zwischen Ansichten navigieren
- ILoggingService (Comarch.POS.Library.Logging)
Service zum Speichern von Informationen in der Logdatei.
- ISecurityService (Comarch.POS.BusinessLogic.Interfaces.Security)
Service zur Authentifizierung und Autorisierung eines POS-Benutzers – mehr dazu im Kapitel Berechtigungen verifizieren
- IAutorizationService (Comarch.POS.Presentation.Base.Services)
Service zur Validierung von angemeldeten POS-Benutzern – mehr dazu im Kapitel Berechtigungen verifizieren
Zu den Geschäftsservices gehören:
- IConfigurationService (Comarch.POS.Library.Settings)
Service, mit dem auf die Anwendungskonfiguration zugegriffen wird.
- IFiscalizationService (Comarch.POS.Presentation.Fiscalization.Services)
Fiskalisierungsdienst
- ISynchronizationService (Comarch.POS.Synchronization.Interfaces)
Synchronisierungsdienst
- IPrintoutManager (Comarch.POS.Presentation.Core.Services)
Ausgabedienst
- Sowie alle anderen, die sich im Bereich Comarch.POS.BusinessLogic.Interfaces befinden.