2009-11-10 11 views
5

Jak mogę zapobiec MEF załadować duplikaty modułów w przypadku obecności 2 kopie tego samego zespołu (być może przez pomyłkę)How-To Prevent Module Duplikaty z MEF?

  • Assembly1.dll

  • Assembly2.dll (kopia z 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); 
    } 
    

Odpowiedz

2

Zamiast korzystać z DirectoryCatalog, użyj AggregateCatalog. Będziesz musiał napisać kod, który obejrzy wszystkie Złożenia w katalogu modułów, dowie się, czy bieżący jest duplikatem tego, który już przetworzył, a jeśli nie, tworzy AssemblyCatalog dla tego Zgromadzenia i dodaje go do katalogu AggregateCatalog.

Nie jestem do końca pewien, jakiej logiki można użyć do wykrycia, że ​​dwie biblioteki DLL o różnych nazwach są tym samym "zespołem".

+0

Potrzebuję zapobiec duplikowaniu typów implementacji modułów ładowanych przez MEF. Dzięki, spróbuję w ten sposób. –