这是我的问题。 程序集A包含一个导出的接口,该接口由我的应用程序中的许多类的构造函数(通过注入)导入。
应用程序1通过将程序集A添加到AggregateCatalog来使用程序集A.应用程序1的一切正常。 但是,在应用程序2中,我希望程序集A的单个部分的值为null,基本上从不加载。我仍然希望任何使用此部分的类构造函数仍然可以通过mef调用。
所以我尝试从AggregateCatalog中排除程序集A,因此,许多类的构造函数(使用ImportingConstructor属性)从未被命中,因为它们的一个参数是程序集A的接口。
如何使一切正常工作,但是当mef使用时,只需将程序集A中的接口值设为null。
答案 0 :(得分: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按需运行!