2013-04-03 13 views
5

Abbiamo un servizio Windows che sta utilizzando Autofac, quando proviamo a caricare gli assembly di riferimento non tutti sono elencati in quanto alcuni contengono oggetti che non vengono utilizzati in qualsiasi punto del l'applicazione, ma le implementazioni dell'interfaccia sono lì, abbiamo bisogno di essere incluse. Il seguente metodo carica i gruppi:Caricamento di tutti gli assembly di riferimento .NET anche se non utilizzati esplicitamente nel codice

private IEnumerable<Assembly> GetReferencedAssemblies(Assembly assembly) 
{ 
    var assemblyNames = assembly.GetReferencedAssemblies(); 

    List<Assembly> assemblies = new List<Assembly>(); 
    assemblies.Add(assembly); 
    foreach (var item in assemblyNames) 
    { 
    var loadedAssembly = System.Reflection.Assembly.Load(item.FullName); 
    assemblies.Add(loadedAssembly); 
    } 

    return assemblies; 
} 

Se facciamo riferimento fittizio a un oggetto contenuto nell'assieme allora carica l'assemblaggio e le tipologie sono costruite da autofac, se togliamo l'oggetto fittizio il complesso viene senza più lungo incluso.

Esiste un modo per includere tutti gli assembly di riferimento indipendentemente dal fatto che si utilizzi direttamente un oggetto (tenendo presente che ne abbiamo ancora bisogno poiché le implementazioni dell'interfaccia sono lì).

Funziona correttamente su ASP.NET poiché carica tutte le DLL nel contenitore.

+1

Ci sono almeno un paio di modi per gestirlo. Sembra una situazione per la quale userò MEF. Metti un [Modulo Autofac] (https://code.google.com/p/autofac/wiki/StructuringWithModules) in ogni assembly e usa MEF per ottenere tutti i moduli, quindi Autofac può prendere il sopravvento. –

risposta

1

Se non si fa effettivamente riferimento a un tipo nell'assieme, il compilatore rimuoverà il riferimento poiché si presume che sia ridondante. È necessario caricare manualmente gli assembly richiesti nell'AppDomain utilizzando Assembly.Load(). La tua determinazione degli assiemi da caricare dipende da te. È possibile scegliere di esaminare i file in una determinata cartella o utilizzare un file di configurazione che contiene i nomi degli assiemi.

Problemi correlati