2013-09-29 32 views
2

我想知道如何使用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; } 

我使用的是为了下面的代码加载插件:

var aggCatalog = new AggregateCatalog(catalogList); 
var container = new CompositionContainer(aggCatalog, 
      CompositionOptions.DisableSilentRejection); 
container.ComposeParts(this); 

,但我得到一个空列表。

回答

6

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

+0

哇,这实际上比我想象的要简单得多..应该在SO小时前发布:)。我试过'ImportingConstructor'属性,但错过了将T1,T2添加到容器! – drtf