MEF 属性导出与 PartCreationPolicy

4
当我尝试做这个时:
[Export(typeof(IMyService))]
[PartCreationPolicy(CreationPolicy.Shared)]
private MyService Service
{
    get
    {
        var service = new MyService();
        service.Configure();
        return service;
    }
}

我遇到了编译错误:属性 'PartCreationPolicy' 在此声明类型上无效,只有在 'class' 声明上才有效。

这是一个错误吗?我不明白为什么MEF允许属性导出,但不允许指定部件的生命周期。
我使用的是VS2010 RC版本。

问题:PartCreationPolicy位于哪个程序集中? - Shimmy Weitzhandler
1个回答

7
创建策略应该放在类上,即使导出放在属性上。类对应于部件,并且创建策略将控制MEF是否每次请求从其导出时创建类的新实例。
我不确定您是否希望使用Shared或NonShared。在您的代码示例中,CreationPolicy设置为Shared,但是您在属性getter中创建了一个新的MyService实例。这似乎表明您可能正在寻找NonShared的创建策略。
如果您确实希望每次请求导出时都创建新服务,则应通过创建策略而不是在getter中创建新实例来实现。导出值不应在运行时更改,事实上,MEF仅会调用getter一次,并将返回值存储以供再次访问导出值时使用。因此,在getter中创建新实例可能会使它看起来像有多个服务被创建,而实际上只有一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接