gpt4 book ai didi

c# - 如何使用 MEF(托管可扩展性框架)从目录加载 dll

转载 作者:行者123 更新时间:2023-11-30 16:36:24 27 4
gpt4 key购买 nike

我目前正在与 MEF 合作并面临一些问题

我想要的是从目录中加载 dll。

首先我扫描目录并在字典中保存两件事

来自相应 DLL 的名称属性(作为字符串)

和模块名称(作为字符串)

这里是 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.AddPart(new DemoFilter1());

我用的不是这个 DirectoryCatalog();;

最佳答案

不使用 DirectoryCatalog,而是使用 AggregateCatalog,并将目录中每个程序集的 AssemblyCatalog 添加到聚合目录中。然后当一个插件被选中或取消选中时,您可以将相应的 AssemblyCatalog 添加或删除到 AggregateCatalog。

请注意,如果给定程序集中有多个插件,则此方法可能会出现问题。一种更稳健的方法可能是使用 filtered catalog 过滤单个零件定义。 .

关于c# - 如何使用 MEF(托管可扩展性框架)从目录加载 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/876323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com