我试图弄清楚如何使用MEF导入通用基类的派生类。
这是这些类的一般描述:
interface IPlugin {}
abstract class PluginBase<T> : IPlugin {}
[Export(typeof(IPlugin))]
class Plugin1 : PluginBase<T1> {
public Plugin1(T1 t1) : base(t1) {};
}
[Export(typeof(IPlugin))]
class Plugin2 : PluginBase<T2> {
public Plugin1(T2 t2) : base(t2) {};
}
[ImportMany(typeof(IPlugin))]
List<IPlugin> importedList { get; set; }
我正在使用以下代码来加载插件:
var aggCatalog = new AggregateCatalog(catalogList);
var container = new CompositionContainer(aggCatalog,
CompositionOptions.DisableSilentRejection);
container.ComposeParts(this);
但是我得到一个空名单。
最佳答案
您的类型具有非默认构造函数,因此MEF无法为您构造对象。将[ImportingConstructor]
属性添加到构造函数。并且不要忘记将T1和T2对象添加到container
中。