2012-12-28 57 views
4

我目前正在使用MEF掃描/撰寫擴展到我的應用程序。我想將默認創建策略更改爲非共享(代替共享),但是要創建策略以便創建策略可以通過屬性進行覆蓋。換句話說,如果我沒有在導出中指定創建策略,我希望MEF使用非共享。MEF - 將默認創建策略更改爲NonShared

我以前的實現不再適用於我,因爲它改變了所有導入的必需創建策略。所以如果我重寫創建策略,導出不會被組合。

我已經搜索了四周,最近我可以得到的是新的RegisrationBuilder,但我在VS2010中使用.NET 4(所以MEF 1)。我也無法弄清楚ExportProviders的一種方式。

任何幫助非常感謝,提前致謝!

+0

我還沒有嘗試過的TransientCompositionContainer但但它看起來像它改變了CreationPolicy.Any(默認值)CreationPolicy.NonShared。因此,具有顯式CreationPolicy.Shared的導入應該仍然有效,其他所有內容都應該是暫時的。 –

+0

另一種方法(儘管我從未嘗試過)將創建一個自定義導入屬性(這應該類似於自定義導出屬性指南http://mef.codeplex.com/wikipage?title=Exports%20and%20Metadata)默認情況下將RequiredCreationPolicy設置爲NonShared。然後使用此屬性更新所有導入。 Apparetnly這不像TransientCompositionContainer那樣優雅。 –

回答

0

我設法創建了一個MEF wrapper,我用它作爲應用程序引導程序。 在我使用MEF的項目中,我有mu定製屬性,我用它來控制腳趾實例化模式。 屬性的自定義實現是:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] 
public class BusinessLogicImportAttribute : ConstraintImportAttribute 
{ 
    public BusinessLogicImportAttribute() 
     : base(typeof(IBusinessController)) 
    { 
     base.RequiredCreationPolicy = RequiredCreationPolicy = CreationPolicy.NonShared; 
    } 
} 
+0

謝謝,我會給它一個! – pdalbe01