【问题标题】:In Mef, can a part of a dependent assembly be null?在 Mef 中,依赖程序集的一部分可以为空吗?
【发布时间】:2014-02-04 08:11:25
【问题描述】:

这是我的问题。 程序集 A 包含一个导出接口,该接口由我的整个应用程序中的许多类的构造函数(通过注入)导入。

应用程序 1 通过将程序集 A 添加到 AggregateCatalog 来使用它。对于应用程序 1,一切正常。 但是,在应用程序 2 中,我希望程序集 A 的单个部分的值为 null,基本上永远不会被加载。我仍然希望使用这部分的任何类的构造函数仍然通过 mef 调用。

所以我尝试从 AggregateCatalog 中排除程序集 A,因此,许多类的构造函数(具有 ImportingConstructor 属性)从未受到影响,因为它们的参数之一是程序集 A 的接口。

我怎样才能让一切都像往常一样工作,但当 mef 使用时,只需将程序集 A 中接口的值设为 null。

【问题讨论】:

    标签: c# import dependency-injection export mef


    【解决方案1】:

    在这里找到答案:http://dailydotnettips.com/2011/09/06/importconstructor-to-inject-constructor-mef/

    当对象在容器中不可用时,导入的 AllowDefault = true 会将对象设置为其默认值(对象为 null),从而放宽运行时异常的发生。

    [ImportingConstructor]
    public ExportContainer([Import(AllowDefault=true)]IService service)
    {
         this.service= service;
    }
    

    因此,当我将所有程序集添加到 AggregateCatalog 时,我能够忽略程序集 A。这使得应用程序 2 可以正常工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多