使用MEF和通用基类

drt*_*rtf 2 c# generics mef

我试图想象如何使用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; }
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码来加载插件:

 var aggCatalog = new AggregateCatalog(catalogList);
 var container = new CompositionContainer(aggCatalog, 
            CompositionOptions.DisableSilentRejection);
 container.ComposeParts(this);
Run Code Online (Sandbox Code Playgroud)

但我得到一个空列表.

Rom*_*lov 6

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