2013-04-16 84 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这我对

有些困惑