2009-11-10 66 views
5

如何從MEF防止加載重複模塊中的同一裝配的2個拷貝(也許錯誤地)如何防止模塊複製與MEF?

  • Assembly1.dll

  • Assembly2.dll存在的情況下(複製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); 
    } 
    

回答

2

代替使用DirectoryCatalog的,使用AggregateCatalog。您必須編寫查看modules目錄中所有程序集的代碼,確定當前程序塊是否與已經處理的程序塊相同,如果不是,則爲該程序集創建AssemblyCatalog並將其添加到AggregateCatalog。

雖然我不確定你能用什麼邏輯來檢測具有不同名稱的兩個DLL是「相同的」程序集。

+0

我需要防止由MEF加載的IModule的重複類型實現。謝謝我會以這種方式嘗試。 – 2009-11-16 13:00:43