Ci sono diversi metodi per avere questo risultato. Il late binding è uno di questi, la chiave del suo funzionamento sono le interface.
Mettiamo che ti abbia due classi DatabaseBridge1 e DatabaseBridge2
Entrambe le classi hanno le stesse funzionalità per cui devi estrarre queste funzionalità in un interfaccia diciamo IDatabaseBridge. Ora le due classi implementano la stessa interfaccia.
A questo punto nella classe che deve istanziare la classe Bridge dichiari una proprietà di tipo IDataBaseBridge, leggi attraverso ConfigurationManager l'impostazione dell'utente e in base a questa crei un istanza della classe concreta giusta.
Nel codice puoi usare solo i metodi dichiarati nell'interfaccia e che descrivono le funzionalita che il bridge dovrebbe avere al di la dell'implementazione specifica. Questa non vederla come una limitazione ma come un binario da seguire per scrivere un codice migliore.codice:private IDatabaseBridge bridge; public Costruttore() { string scelta = ConfigurationManager.AppSettings["DBBridge"].ToString(); if (scelta.Equals("MYSQL")) bridge = new DatabaseBridge1(); else bridge = new DataBaseBridge2(); }