gpt4 book ai didi

mef - MEF Container.Dispose 是否处理添加的目录?

转载 作者:行者123 更新时间:2023-12-04 14:51:28 25 4
gpt4 key购买 nike

这类似于我的代码的外观

var catalog = new AssemblyCatalog(typeof(Program).Assembly);
_container = new CompositionContainer(catalog);

代码分析显示警告 CA2000:在对目录的所有引用超出范围之前调用目录上的处置。

所以我不确定是否需要取消警告或将 _catalog 变成一个字段 + 处理它。

MEF Docs 似乎没有提到这一点。

最佳答案

根据MEF Preview 9源代码(可能与 .NET 4 中提供的代码非常匹配)CompositionContainer将目录包裹在 CatalogExportProvider 中.此导出提供程序存储在字段中并与容器一起处理。然而,CatalogExportProvider.Dispose不是 依次处理包裹的ComposablePartCatalog .

因此答案是否定的:CompositionContainer不处理目录。

您可以通过运行此代码来验证这一点,该代码不会向控制台打印任何内容:

class MyCatalog : ComposablePartCatalog
{
protected override void Dispose(bool disposing)
{
Console.WriteLine("Disposed!");
base.Dispose();
}

public override IQueryable<ComposablePartDefinition> Parts
{
get { throw new NotImplementedException(); }
}
}

class Program
{
static void Main(string[] args)
{
var container = new CompositionContainer(new MyCatalog());
container.Dispose();
Console.ReadKey();
}
}

关于mef - MEF Container.Dispose 是否处理添加的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675881/

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