如何使用MEF防止模块重复?

时间:2009-11-10 13:37:18

标签: c# 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);
    }
    

1 个答案:

答案 0 :(得分:2)

使用AggregateCatalog而不是使用DirectoryCatalog。您必须编写查看modules目录中所有程序集的代码,确定当前的程序集是否与已处理的程序集重复,如果不是,则为该程序集创建AssemblyCatalog并将其添加到AggregateCatalog。

我不确定你能用什么逻辑来检测具有不同名称的两个DLL是“相同”的程序集。