使用合同名称导入MEF无属性属性

时间:2013-04-16 10:33:56

标签: c# mef

我发现导入属性所需的lambda表达式有些令人困惑,我也试图理解如何使用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中有一个我希望填充的属性

试过这个(在App本身内进行)

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

但这不起作用,我猜我需要以某种方式设置合同名称?任何人都可以告诉我这是什么语法?也许如果我能看到correc语法,我可以更好地理解它是如何工作的......我希望!

1 个答案:

答案 0 :(得分:1)

通常我发现在发布问题后我找到了解决方案。我不倾向于回答我自己的问题,但因为它让我有一段时间了,如果它能帮助其他任何人,那么这是有效的:

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

但是,只有当我使用SafisfyImportsOnce而不是ComposeParts而我才会感到有些困惑时才会这样做