2013-04-16 83 views
0

我發現需要導入屬性的lambda表達式有點令人困惑,我也想了解如何使用MEF約定導入和導出,所以也許我試圖承擔太多立刻。MEF無屬性導入合同名稱

我出口ResourceDictionary與我之前導入這樣的合同名稱:

[ImportMany("ApplicationResources", typeof(ResourceDictionary))] 
public IEnumerable<ResourceDictionary> Views { get; set; } 

效果很好,是很好,但是我現在想通過RegistrationBuilder導入這一點,但不能完全理解如何做這個。

該出口他們相信(但我必須說實話,我不完全理解的語法):

var registration = new RegistrationBuilder(); 
registration.ForTypesDerivedFrom<ResourceDictionary>() 
    .Export<ResourceDictionary>(x => x.AsContractName("ApplicationResources")); 

我在我的App,我想一個屬性來填充

所以試了這個(在應用程序本身進行)

registration.ForType<App>() 
    .ImportProperty<ResourceDictionary>(x => x.Views); 

但這不工作,我猜我需要設置契約名稱?任何人都可以告訴我這是什麼語法?也許如果我能看到更正語法,我可以更好地理解它是如何工作的......我希望!

回答

1

通常事實證明,我在發佈問題後找到了解決方案。我不傾向於回答自己的問題,但它讓我stuch了一段時間,在情況下,它可以幫助其他人,這是什麼在起作用:

registration.ForType<App>() 
    .ImportProperty<ResourceDictionary>(x => x.Views, ib => ib.AsContractName("ApplicationResources")); 

但是這隻能如果我使用SafisfyImportsOnce而非ComposeParts這我對

有些困惑