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

标签 c# mef

如果存在同一程序集的两个副本(可能是错误的),我如何防止 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);
    }
    

最佳答案

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

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

关于c# - 如何使用 MEF 防止模块重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1708018/

相关文章:

c# - 在没有设备或 "real"模拟器的情况下接收 iPhone/Android 的推送通知

c# - 我需要帮助使用 lambda 表达式在 Entity Framework 上下文中查找记录

c# - MEF:从类型中获取导出值?

c# - 如何在 Prism4 MEF 中创建我的类的实例?

.net - 如何在可移植类库中使用 MEF?

c# - 如何在 .NET 中以 SOLID 方式实现库级跟踪和诊断?

c# - ASP.NET Core 自定义验证属性本地化

c# - 将新行插入到 DataGrid 中,具有不同的列 C#

.net - MEF可以用来获取标记为[Export]的类的System.Type吗?

c# - mefcontrib拦截目录导出错误