我有一个基类和一个派生类,我想导出从其中任何一个派生的类型。
所以像这样
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 导入非单例,但这可能会破坏我的导入。