2010-04-19 65 views
4

当我尝试这样做:MEF房产出口与PartCreationPolicy

[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。

+0

问题:PartCreationPolicy位于哪个组件中? – Shimmy 2010-09-01 22:25:26

回答

7

PartCreationPolicy应该放在类上,即使导出属性也是如此。该类与该部分相对应,创建策略将控制MEF是否在每次从其请求导出时创建该类的新实例。

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

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