c# - MEF - 导出和导入通用类型

标签 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 会用特定类型解析导出吗?

谢谢

最佳答案

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

您不能只定义一个接口(interface) IRepositoryBase 来封装独立于使用的类型参数(如果存在)的方法吗?

interface IRepository<T> : IRepositoryBase

这可以在导出属性中使用,即使对于派生类型也是如此:

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

关于c# - MEF - 导出和导入通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25057809/

相关文章:

c# - 如何设置 JsReport .NET 以使用当前应用程序文件夹

c# - 强制安装程序在 VS 2008 中需要 .NET 4.0

dependency-injection - 抽象不应依赖于细节。细节应该取决于抽象吗?

c# - 如何让 C# 类在其构造函数中实例化另一个类?

c# - SelectedValue 在 DropDownList 中回发时失败

.net - 有比 .NET Reflector 更好的东西吗?

c# - 是否可以将 C# DataAnnotations 与 IOC 容器一起使用?

c# - 使用 Autofac 聚合服务来共享依赖项

c# - 如何使用 ASP.NET MVC 返回动态 CSS?

c# - Windows Phone 7 是否支持动态关键字?