Riduzione del codice DI ripetitivo

1

Ho un metodo che costruisce le dipendenze usando Unity. Attualmente, tutte le chiamate fanno praticamente la stessa cosa: Registra 2 oggetti repository e 2 oggetti 'App Part'. Il mio problema è che ce ne sono molti e il metodo è diventato enorme. Ho generalizzato le chiamate ma ecco un esempio:

container.RegisterType<IRepositoryOneDataAccess, RepositoryOneDataAccess>();
container.RegisterType<IRepositoryTwoDataAccess, RepositoryTwoDataAccess>();
container.RegisterType<IAppPart, FirstAppPart>("FirstAppPart.TestName");
container.RegisterType<IAppPart, SecondAppPart>("SecondAppPart.TestName");

Ho pensato che questo potesse essere diviso per ridurre il codice nel metodo che registra i tipi con il contenitore.

In primo luogo ho spostato le 2 chiamate in basso in un altro metodo poiché entrambi si registrano alla stessa interfaccia, ho trovato questo metodo:

private void RegisterParts<TPartOne, TPartTwo>(string firstAppPartName, string secondAppPartName) where TPartOne : IAppPart where TPartTwo : IAppPart
{
    container.RegisterType<IAppPart, TPartOne>(firstAppPartName);
    container.RegisterType<IAppPart, TPartTwo>(secondAppPartName);
}

Questo sembra funzionare ma non sono sicuro che questo sia il modo migliore per farlo. Vorrei anche spostare le altre chiamate in un altro metodo preferibilmente uguale a quello che ho creato, ma non sono sicuro di come farlo o anche se è possibile.

C'è un modo migliore per refactoring questo?

    
posta Serberuss 19.06.2013 - 12:47
fonte

1 risposta

1

Questo può essere fatto usando la riflessione sugli assiemi se si usano alcune convenzioni. Altre librerie DI come StructureMap che uso hanno questa caratteristica. Una rapida ricerca di Unity ha trovato questa libreria Unityconfiguration anche se non l'ho usata.

Vedo anche che Unity 3.0 supporta registrazione per convenzione . Quindi l'opzione più semplice potrebbe essere l'aggiornamento.

    
risposta data 19.06.2013 - 14:01
fonte

Leggi altre domande sui tag