Domanda

(Questa domanda è specifica in C #, ma si applica generalmente a .NET)

Ho un'applicazione di grandi dimensioni che ha un design abbastanza buono ed è suddivisa in sezioni principali su interfacce (questo è stato fatto per favorire lo sviluppo parallelo).

Ora disponiamo di un set primario di classi concrete che implementano le interfacce richieste, ma abbiamo anche set aggiuntivi di classi concrete per situazioni e test alternativi.

Al momento riuniamo tutte queste classi al massimo livello nel codice:

IMyInterface xComponent = new ConcreteXComponent1();

Se voglio scambiare i componenti, devo solo cambiare quella riga e ricompilare:

// IMyInterface xComponent = new ConcreteXComponent1();
IMyInterface xComponent = new ConcreteXComponentAlternative();

Funziona benissimo, ma ovviamente richiede una ricompilazione - Preferirei che la classe concreta fosse scelta usando un valore da un file di configurazione.

Qual è lo schema standard per cambiare le classi concrete usando un file di configurazione? Esiste una libreria standard che posso usare per risolvere questo problema per me?

Grazie!

È stato utile?

Soluzione

Vuoi dare un'occhiata ai contenitori IoC. (Spring.NET, StructureMap, Windsor, ecc.)

Altri suggerimenti

È possibile utilizzare il metodo Activator.CreateInstance . Uno dei metodi di overload prende un nome di tipo e ne crea un'istanza utilizzando il costruttore predefinito. Quindi è possibile memorizzare il nome del tipo della classe nel file di configurazione e leggerlo dall'applicazione.

L'uso di un contenitore IoC creerà un pool o una raccolta di oggetti che è possibile caricare in modo dinamico. I framework suggeriti da Romain useranno un file di configurazione che descrive gli oggetti e come sono istanziati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top