【发布时间】:2013-06-21 21:12:39
【问题描述】:
我有一个基类和一个派生类,我想导出从其中任何一个派生的类型。
就这样
public class ClassA { }
public class ClassB : ClassA { }
我需要加载从 ClassA 派生的类型以及从 ClassB 派生的类型。
var registration = new RegistrationBuilder();
registration.ForTypesDerivedFrom<ClassA>()
.Export<ClassA>();
registration.ForTypesDerivedFrom<ClassB>()
.Export<ClassB>();
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(".", registration));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly(), registration));
container = new CompositionContainer(catalog);
container.SatisfyImportsOnce(this, registration);
我认为问题在于,在导出 ClassA 派生类型时,它还会导出 ClassB 类型,这很明显,也是我正在寻找的功能。但这意味着 ClassB 导入不会作为独立对象导出,而是与作为 ClassA 类型导入的对象相同。如果我没有专门导出 ClassB,那么使用它们的任何导入都会失败。
我可能正在尝试做一些愚蠢的事情来尝试解决我在这里遇到的 MEF 不喜欢的问题?我已经研究过让 MEF 导入非单例,但这可能会破坏我的导入。
【问题讨论】:
-
您收到的错误信息是什么?请注意,RegistrationBuilder.ForTypesDerivedFrom 将不包含指定类型,仅包含其派生类。
标签: mef