Mi sento come se fossi bloccato tra diverse soluzioni sbagliate qui e ho bisogno di alcuni consigli su come ridurre al minimo l'agonia futura. Stiamo usando Massive ORM, che nel suo costruttore ha queste linee:Modesto modo di modificare il comportamento del costruttore
var _providerName = "System.Data.SqlClient";
if (ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName != null)
_providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName;
_factory = DbProviderFactories.GetFactory(_providerName);
ConnectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
La parte importante per me qui è che legge le stringhe di connessione da ConfigurationManager
. Stiamo cercando di centralizzare la configurazione e, nel farlo, vogliamo mantenere le stringhe di connessione fuori dal nostro web/app.configs (abbiamo circa 150 host distribuiti, quindi il sovraccarico sta diventando significativo). Tuttavia, questo si interrompe poiché il file di configurazione letto è hardcoded qui e la raccolta ConnectionStrings
è di sola lettura (ci sono soluzioni alternative, ma sono tutte abbastanza sporche).
Una possibile via d'uscita è estrarre queste linee in un metodo virtuale e quindi modificarle con l'ereditarietà. Non è così bello quando vogliamo aggiornare Massive, e anche chiamare metodi virtuali da un costruttore è potenzialmente negativo.
Quali altre alternative ho? La priorità principale qui è minimizzare l'impatto durante l'aggiornamento.
Questa sembra un'opportunità per il modello di Service Locator: http://en.wikipedia.org/wiki/Service_locator_pattern –
@JoshC .: Sì, un'alternativa è quella di refactoring in qualche interfaccia 'IConfigurationManager' che ha un valore predefinito l'implementazione utilizza semplicemente ConfigurationManager. Non sono sicuro, tuttavia, quali sono i pro/contro rispetto all'ereditarietà? – carlpett
E riguardo la memorizzazione delle stringhe di connessione in un file separato? sarebbe d'aiuto? (vedi 'Uso dei file di configurazione esterni' msdn.microsoft.com/en-us/library/ms254494(v=vs.80).aspx) –