【问题标题】:MEF attribute-less property importing with contract name使用合同名称导入 MEF 无属性属性
【发布时间】:2013-04-16 10:33:55
【问题描述】:

我发现导入属性所需的 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);

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

【问题讨论】:

    标签: c# mef


    【解决方案1】:

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

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

    但是,这只有在我使用 SafisfyImportsOnce 而不是 ComposeParts 时才有效,我对此有点困惑

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 2017-10-05
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多