Table des matières
L’application POS utilise le mécanisme des conteneurs Unity. Il permet d’accéder rapidement et facilement à tous les services enregistrés auparavant dans une classe quelconque de ViewModel et de View. Le mécanisme résout également toutes les dépendances, à condition qu’elles aussi aient été enregistrées auparavant. Un exemple serait toute vue qui est obtenu du conteneur avec l’implémentation simultanée d’un viewmodel dépendant dans son constructeur. Ceci est possible, car chaque viewmodel est auparavant enregistré dans un conteneur (voir le chapitre Enregistrer vues à naviguer et à gérer l’affichage dans l’article Créer des vues). Dans ce viewmodel sont à son tour implémentés les autres services requis qui lui sont indispensables (à condition qu’ils aient été enregistrés auparavant).
Téléchargement des services à partir du conteneur
Une instance d’un service donné peut être téléchargée de trois façons :
1. Définir une propriété publique avec l’attribut Dependency de l’espace Practices.Unity ajouté.
[Dependency] public IProductsService ProductsService { get; set; }
2. Implémenter une instance dans le constructeur de viewmodel à l’aide d’une déclaration simple de paramètre.
public OrdersViewModel(IProductService productService) { … }
3. Appeler la méthode Resolve sur l’objet IUnityContainer disponible dans la classe ViewModelBase sous la propriété
var productsService = Container.Resolve<IProductsService>();
Une instance de service est créée à chaque fois au moment de son téléchargement du conteneur. Une exception est le cas d’un service enregistré comme singleton, dont l’instance est créée une seule fois, lors du premier essai du téléchargement.
Enregistrement des services personnalisés dans le conteneur
Un service peut être enregistré à tout moment, dans chaque espace où nous avons accès à l’objet IUnityContainer. Si nous souhaitons être sûrs que le service sera disponible dès le début, il faut l’enregistrer dans la classe Module. C’est le cas pour tous les viewmodels. Un service peut être enregistré sur la base de son interface. Si la classe de service n’a pas d’interface, il n’est pas obligatoire de l’enregistrer, sauf si nous voulons qu’elle soit disponible en tant que singleton.
Afin d’enregistrer un service dans la classe Module, il faut enregistrer la méthode suivante :
Register<TInterface,TClass>() où TInterface est le nom d’interface et TClass est le nom de la classe implémentant cet interface. Paramètres supplémentaires :
- singleton (bool) – paramètre définissant si l’instance téléchargée du conteneur doit être à chaque fois créée à nouveau ou si la même instance doit être toujours retournée. La valeur de ce paramètre est par défaut
Ci-dessous, vous trouverez un exemple d’enregistrement dans la classe Module du service de classe CustomService implémentant l’interface ICustomService en tant que singleton :
Register<ICustomService, CustomerService>(true);
Si nous tenons à ce qu’une instance du service enregistré soit immédiatement initialisée, alors que ce service contient des dépendances qui sont implémentées automatiquement, il faut vérifier si cela sera possible. Dans le cas où le service dépend d’un autre service qui existe dans un autre module, il faut vérifier qu’il a déjà été enregistré. Pour en être sûr, l’initialisation de l’instance (téléchargement du conteneur) doit être exécuté au sein de la méthode AfterAllModulesLoaded (qui se trouve dans ModuleBase).
Liste des services disponibles dans POS
Les services sont divisés en services de bases relatives au cœur de l’application POS et services métiers relatives à la logique du fonctionnement métier de l’application.
La liste des services de bases comprend :
- IMonitService (Comarch.POS.Presentation.Core.Services)
Service permettant d’afficher les messages (informatifs et interrogatifs) – voir le chapitre Messages dans l’article Notifications et messages
- INotificationService (Comarch.POS.Presentation.Core.Services)
Service permettant d’afficher les notifications – voir le chapitre Notifications dans l’article Notifications et messages
- IViewManager (Comarch.POS.Presentation.Core.Services)
Classe permettant de contrôler les vues (ouverture et fermeture) – voir l’article Naviguer entre les vues
- ILoggingService (Comarch.POS.Library.Logging)
Service permettant d’enregistrer les informations dans le fichier journal
- ISecurityService (Comarch.POS.BusinessLogic.Interfaces.Security)
Service responsable de l’authentification et de l’autorisation d’utilisateur POS – pour plus d’informations, voir le chapitre Vérification des autorisations
- IAutorizationService (Comarch.POS.Presentation.Base.Services)
Service permettant de valider les autorisations des utilisateurs POS connectés – pour plus d’informations, voir le chapitre Vérification des autorisations
La liste des services métiers comprend :
- IConfigurationService (Comarch.POS.Library.Settings)
Service permettant d’accéder à la configuration de l’application
- IFiscalizationService (Comarch.POS.Presentation.Fiscalization.Services)
Service de fiscalisation
- ISynchronizationService (Comarch.POS.Synchronization.Interfaces)
Service de synchronisation
- IPrintoutManager (Comarch.POS.Presentation.Core.Services)
Service d’impression
- Ainsi que tous les autres services dans l’espace Comarch.POS.BusinessLogic.Interfaces