如何通过MEF避免模块重复?

5

如何防止MEF在同一程序集的两个拷贝 (可能是错误导致) 存在的情况下加载重复模块?

  • Assembly1.dll

  • Assembly2.dll (copy of 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个回答

2

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

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


我需要防止 MEF 加载重复的 IModule 类型实现。谢谢,我会尝试这种方式。 - Yoann. B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接