gpt4 book ai didi

ioc-container - 使用 PartCreationPolicy 导出 MEF 属性

转载 作者:行者123 更新时间:2023-12-05 00:06:56 25 4
gpt4 key购买 nike

当我尝试这样做时:

[Export(typeof(IMyService))]
[PartCreationPolicy(CreationPolicy.Shared)]
private MyService Service
{
get
{
var service = new MyService();
service.Configure();
return service;
}
}

我收到一个编译错误: Attribute 'PartCreationPolicy' is not valid on this declaration type. It is only valid on 'class' declarations.
这是一个错误吗?我不明白为什么 MEF 会允许属性导出但不允许指定部件的生命周期。

使用 VS2010 RC。

最佳答案

PartCreationPolicy 应该在类上,即使导出在属性上。类是对应于部件的内容,创建策略将控制每次从它请求导出时 MEF 是否创建类的新实例。

我不确定您要使用 Shared 还是 NonShared。您在代码示例中将 CreationPolicy 设置为 Shared,但随后您正在属性 getter 中创建 MyService 的新实例。这似乎表明您可能正在寻找 NonShared 的创建策略。

如果您确实希望在每次请求导出时创建一个新服务,您应该通过创建策略来实现,而不是通过在 getter 中创建一个新实例。导出的值不应该在运行时更改,实际上 MEF 只会调用一次 getter,并在需要再次访问导出的值时存储返回值。因此,在您的 getter 中创建一个新实例可以使它看起来像是创建了多个服务,而实际上只有一个。

关于ioc-container - 使用 PartCreationPolicy 导出 MEF 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667066/

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