MEF - 导出和导入通用类型

时间:2014-07-31 11:30:31

标签: c# .net inversion-of-control mef

由于使用MEF插件,我正在从结构IOC转移到仅使用MEF。一切顺利......除了这种情况。

假设我有这个课程

[Export(typeof(IRepository<>))]
public class ConcreteRepository<T> : IRepository<T> {
}

使用结构我有一种传递类型的方法,所以我可以通过查找ConcreteRepository<T>来获得IRepository<T>

我如何使用Composition容器实现这一点,我虽然想构建一个通用方法来调用IRepository,但是MEF会解析具有特定类型的导出吗?

感谢

1 个答案:

答案 0 :(得分:0)

您不能对导出属性使用“泛型类型定义”,它必须是特定类型(可能具有类型属性,但必须定义它们)。

你不能只定义一个接口IRepositoryBase来封装独立于使用的类型参数的方法(如果有的话)?

interface IRepository<T> : IRepositoryBase

然后可以在export属性中使用它,即使对于派生类型:

[Import(typeof(IRepBase))]
private IRepository<string> TestRep;