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