0

我发现导入属性所需的 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我想填充的属性

所以尝试了这个(在应用程序本身内执行)

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

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

4

1 回答 1

1

通常,事实证明我在发布问题后找到了解决方案。我不倾向于回答我自己的问题,但因为它让我坚持了一段时间,以防它帮助其他人,这就是有效的:

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

但是,这仅在我使用SafisfyImportsOnce而不是ComposeParts我对此感到有些困惑的情况下才有效

于 2013-04-16T10:48:28.327 回答