2010-04-19 69 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中創建一個新的實例可以使它看起來像會有多個服務創建,實際上只有一個。