将 MEF 与泛型基类一起使用

本文关键字:一起 基类 泛型 MEF | 更新日期: 2023-09-27 18:33:10

我正在尝试弄清楚如何使用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 与泛型基类一起使用

你的类型具有非默认构造函数,因此 MEF 无法为你构造对象。将[ImportingConstructor]属性添加到构造函数。并且不要忘记将 T1 和 T2 对象添加到 container 中。