Qual è il modo migliore per passare la configurazione specifica del provider a oggetti diversi

0

Sto costruendo un'integrazione middleware che estrarrà gli ordini da varie API di terze parti e invierà tali ordini nel nostro sistema, oltre a sincronizzare le scorte e inviare le spedizioni. Voglio creare questo in modo tale da poter aggiungere vari rivenditori in un secondo momento senza dover modificare il progetto Core .

L'ho creato in alcuni progetti:

  • Comune (solo cose comuni come WebClient, Serialization, IO ecc.)
  • ERP (questo è l'ERP su cui inseriremo questi dati e questo ha tutti i modelli e servizi per inviare ordini, ecc.)
  • Core (questo si connetterà a un database per ottenere un elenco delle varie integrazioni che sono state impostate, caricare la DLL dei provider e quindi estrarre gli ordini, ecc.)
  • Providers.Retailer1 (questi hanno una dipendenza dal progetto ERP poiché restituiranno dati come gli ordini nei modelli dall'ERP)
  • Providers.Retailer2
  • Providers.Retailer3

Attualmente, il mio progetto Core ha un riferimento al progetto sui Provider. Voglio arrivare ad un punto in cui il Core non ha un riferimento difficile a questi provider - forse sono caricati dinamicamente in fase di esecuzione controllando se la classe implementa un'interfaccia. Quindi, in teoria, se vogliamo integrarci con un nuovo rivenditore, dovremmo semplicemente costruire l'implementazione di ottenere ordini / sincronizzare azioni ecc. Questo suona come un approccio sano? Stavo pensando di guardare in MEF per questo, ma non sono ancora sicuro di come sarebbe.

Il mio problema è, è che Retailer1 per esempio ha bisogno di certe configurazioni e servizi come ApiKey , Username , Password ecc. dove come Retailer2 potrebbe richiedere diversi dati di configurazione. Attualmente, il progetto Core è ciò che recupererà questi dettagli dal database. Qual è il modo migliore per passare a Providers ? Devo creare un oggetto Configuration che sia fondamentalmente una coppia chiave / valore della configurazione e programmare l'interfaccia per accettare un oggetto Configuration ? E memorizzare questi valori in una coppia chiave / valore in una tabella di database invece di colonne come sono attualmente?

Attualmente creo le dipendenze all'interno del progetto Core , tuttavia ciò significa che il progetto Core è strettamente accoppiato con Retailer1 ad esempio:

         TheIconic.Services.IApiService iconicApiService = new TheIconic.Services.TheIconicApiService(
            DependencyContainerProvider.Current.Container.Resolve<IWebClient>(),
            instance.IntegrationPartner.ApiUrl,
            instance.IntegrationPartner.ApiKey,
            instance.IntegrationPartner.Username,
            instance.IntegrationPartner.BasicAuthUsername,
            instance.IntegrationPartner.BasicAuthPassword
        );
    
posta Lock 27.05.2017 - 04:57
fonte

2 risposte

1

Should I create a Configuration object that is basically a key/value pair of the configuration and program the interface to accept a Configuration object?

Se un elenco di coppie chiave / valore è tutto ciò che serve per configurare un provider, allora sì, sembra una soluzione valida. In effetti è la soluzione esatta utilizzata dai fornitori di dati ODBC (tramite la stringa di connessione, che è un elenco di coppie chiave / valore memorizzate in un blob di testo).

Se hai bisogno di qualcosa di più complicato, puoi ancora usare una stringa, ma forse invece di coppie tag / valore potrebbe contenere XML o JSON.

    
risposta data 31.05.2017 - 05:10
fonte
0

What is the best way to pass these to the Providers?

Perché non consideri l'iniezione DI? Crea un numero qualsiasi di specifiche fabbriche di dati per i provider, che utilizzano% di classi di% co_de per creare dati all'interno e quindi trasferisci tali fabbriche in costruttori di Core 'tramite la libreria di Dependency Injection come NInject. In questo modo i tuoi fornitori sono isolati dal nucleo.

    
risposta data 28.05.2017 - 22:45
fonte

Leggi altre domande sui tag