Come approccio generale, penso che puoi sostituire un codice che utilizza Activator.CreateInstance
con Factory
. La fabbrica può accettare un parametro che è possibile utilizzare per selezionare il tipo corretto da creare e quindi risolvere tale tipo utilizzando il contenitore IoC.
Ad esempio Castle Windsor come una caratteristica chiamata Typed Factory che può fare tutto il lavoro per il tuo.
Ad esempio se hai il seguente codice:
var component = (MyService)Activator.CreateInstnace(myImplementationType, [params]);
Puoi sostituire con qualcosa di simile
var component = myFactory.Create(params);
o
var component = myFactory.Create<MyService>([params]);
Un altro approccio che può essere utilizzato è quello di invertire la dipendenza (Inversion of Control) e lasciare che il componente principale decida quali componenti iniettare. Questo è l'approccio raccomandato nella maggior parte delle situazioni. Dal principale è possibile registrare l'implementazione corretta e lasciare che la Dipendenza dell'iniezione faccia funzionare.