我目前正在使用MEF并遇到一些问题
我想要从目录中加载dlls。
首先,我扫描目录并将两个内容保存在字典中:
来自各自DLL的Name属性(作为字符串)
和模块名称(作为字符串)
这是ScanDirectory()代码
private void ScanPluginDirectory()
{
catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\plugin"));
container = new CompositionContainer(catalog);
batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
pluginDictionary = new Dictionary<String, String>();
foreach (IFilter filter in filters)
{
Type t = filter.GetType();
pluginDictionary.Add(filter.Name, t.Module.Name);
}
}
当选择复选框中的dll时,显示它们的名称。
我有一个导入语句:
[Import]
public IEnumerable<IFilter> filters { get; set; }
目前我的程序运行良好。我的做法是当我从复选框列表中勾选插件时,将其移动到“已加载”目录中,然后QueryPlugin()方法会在“已加载”目录中查找插件。
当我取消复选框列表中的插件时,我会将其移出“已加载”目录...
我想使用batch.RemovePart()方法来摆脱这种快速将dll从一个目录移动到另一个目录的方式....
注意:我不是手动使用batch添加插件的。
batch.AddPart(new DemoFilter1());
我使用了DirectoryCatalog()代替此方法。