如何使用MEF防止模块重复?
如果存在2个相同组件的副本(可能是错误的),我如何防止MEF加载重复模块
-
Assembly1.dll
-
Assembly2.dll(Assembly1的副本)
[ImportMany] public IList Modules { get; private set; } public void BuildUp() { Modules = new List(); var catalog = new DirectoryCatalog(@".\Modules"); var container = new CompositionContainer(catalog); container.ComposeParts(this); }
使用AggregateCatalog而不是使用DirectoryCatalog。 您必须编写查看modules目录中所有程序集的代码,确定当前的程序集是否与已处理的程序集重复,如果不是,则为该程序集创建AssemblyCatalog并将其添加到AggregateCatalog。
我不确定你能用什么逻辑来检测具有不同名称的两个DLL是“相同”的程序集。