Servizi

L’applicazione POS utilizza il meccanismo dei contenitori Unity. Questo rende possibile un accesso veloce a tutti i servizi precedentemente registrati in qualsiasi classe del ViewModel e View. Risolve anche tutte le dipendenze, a patto che anche queste siano state registrate prima. Un esempio può essere ogni vista ottenuta dal contenitore con il contemporaneo inserimento del view-model dipendente nel suo costruttore. Questo è possibile perché ogni view-model viene prima registrato nel contenitore (vedi: <<Registrazione delle viste per la navigazione e per la gestione dell’aspetto>>). Invece in questo viewmodel vengono inseriti altri servizi richiesti che sono necessari per questo viewmodel (a patto che siano stati registrati prima).

Scaricamento dei servizi dal contenitore

Lo scaricamento dell’istanza del servizio selezionato può essere effettuato in tre modi:

  • Tramite la definizione della proprietà pubblica con aggiunto attributo Dependency dall’area Practices.Unity.
[Dependency]

public IProductsService ProductsService { get; set; }

 

  • Tramite l’inserimento dell’istanza nel costruttore del viewmodel tramite la dichiarazione semplice del parametro.
public OrdersViewModel(IProductService productService) { … }

 

  • Chiamata del metodo Resolve sull’oggetto IUnityContainer disponibile nella classe ViewModelBase sotto la proprietà
var productsService = Container.Resolve<IProductsService>();

Tramite la creazione dell’istanza del servizio che avviene con ogni suo scaricamento dal contenitore. L’eccezione costituisce il caso del servizio registrato come singleton la cui istanza viene creata soltanto una volta durante il primo tentativo di scaricamento.

Registrazione dei propri servizi nel contenitore

La registrazione del servizio può essere effettuata in qualsiasi momento, dappertutto dove abbiamo l’accesso all’oggetto IUnityContainer. Se vogliamo essere sicuri che il servizio sarà disponibile dall’inizio, bisogna registrarlo nella classe Module. Questa regola si applica per tutti i view-model. Il servizio può essere registrato in base alla sua interfaccia. Se la classe del servizio non ha l’interfaccia, non bisogna registrarla, a meno che non vogliamo che sia disponibile come singleton.

Per registrare il servizio nella classe Module bisogna utilizzare il metodo

Register<TInterface,TClass>(), dove TInterface è il nome dell’interfaccia e  TuClass è il nome della classe che implementa l’interfaccia. Parametri aggiuntivi:

  • singleton (bool): parametro che indica se l’istanza scaricata dal contenitore deve essere ogni volta creata di nuovo o sempre restituita come la stessa istanza. Per impostazione predefinita, il valore di questo parametro è impostato su

Di sotto viene presentato un esempio di registrazione nella classe Module del servizio della classe CustomService che implementa l’interfaccia ICustomService come singleton:

Register<ICustomService, CustomService>(true);

 

Se vogliamo perché il servizio registrato sia immediatamente istanziato, ma contiene dipendenze che saranno inserite automaticamente, dobbiamo accertarci che questo sarà possibile. Nel caso in cui il servizio dipenda da un altro servizio che esiste in un altro modulo, dobbiamo assicurarci che esso sia già stato registrato. Perché questo sia garantito, l’istanziazione (scaricamento dal contenitore) deve essere eseguita all’interno del metodo AfterAllModulesLoaded  (che si trova in ModuleBase).

Elenco dei servizi POS disponibili

I servizi possono essere divisi in quelli di base, riguardanti il core dell’applicazione POS e i servizi business che riguardano la logica di funzionamento dell’applicazione dal punto di vista del business.

Tra i servizi di base si annoverano:

  • IMonitService (Comarch.POS.Presentation.Core.Services)

Servizio che consente di visualizzare i messaggi (informazioni e domande). Più informazioni disponibili nel capitolo <<Messaggi>>.

  • INotificationService (Comarch.POS.Presentation.Core.Services)

Servizio che consente di visualizzare le notifiche. Più informazioni disponibili nel capitolo <<Notifiche (Messaggi)>>.

  • IViewManager (Comarch.POS.Presentation.Core.Services)

Classe che consente di gestire le viste (apertura e chiusura). Più informazioni disponibili nel capitolo <<Navigazione tra le viste>>.

  • ILoggingService (Comarch.POS.Library.Logging)

Servizio che consente di salvare le informazioni nel file di log

  • ISecurityService (Comarch.POS.BusinessLogic.Interfaces.Security)

Servizio responsabile per l’autenticazione e autorizzazione dell’utente POS. Più informazioni disponibili nel capitolo <<Verifica delle autorizzazioni>>.

  • IAutorizationService (Comarch.POS.Presentation.Base.Services)

Servizio responsabile per la convalida delle autorizzazione degli utenti POS connessi. Più informazioni disponibili nel capitolo <<Verifica delle autorizzazioni>>.

Tra i servizi business si annoverano:

  • IConfigurationService (Comarch.POS.Library.Settings)

Servizio che consente di ottenere l’accesso alla configurazione dell’applicazione

  • IFiscalizationService (Comarch.POS.Presentation.Fiscalization.Services)

Servizio di stampa sulla stampante fiscale

  • ISynchronizationService (Comarch.POS.Synchronization.Interfaces)

Servizio di sincronizzazione

  • IPrintoutManager (Comarch.POS.Presentation.Core.Services)

Servizio di stampa

  • E tutti gli altri servizi che si trovano nell’area Comarch.POS.BusinessLogic.Interfaces

 

Czy ten artykuł był pomocny?