2009-11-10 5 views
5

Wie kann ich von MEF verhindern Duplikate Module im Fall der Anwesenheit von 2 Kopien derselben Versammlung (vielleicht versehentlich)How-To Modulduplikate mit MEF verhindern?

  • Assembly1.dll

  • Assembly2.dll (Kopie zu laden von Assembly1)

    [ImportMany] 
    public IList<IModule> Modules { get; private set; } 
    
    public void BuildUp() 
    { 
        Modules = new List<IModule>(); 
    
        var catalog = new DirectoryCatalog(@".\Modules"); 
        var container = new CompositionContainer(catalog); 
    
        container.ComposeParts(this); 
    } 
    

Antwort

2

Statt eine Directory der Verwendung eines AggregateCatalog verwenden. Sie müssen Code schreiben, der alle Assemblies im Verzeichnis modules betrachtet, ob das aktuelle Duplikat eines bereits verarbeiteten ist, und falls nicht, erstellt er ein AssemblyCatalog für diese Assembly und fügt es dem AggregateCatalog hinzu.

Ich bin mir nicht sicher, welche Logik Sie verwenden könnten, um zu erkennen, dass zwei DLLs mit unterschiedlichen Namen die "gleiche" Assembly sind.

+0

Ich muss verhindern, dass Duplikate Implementierungen von IModule von MEF geladen werden. Danke, ich werde es auf diese Weise versuchen. –