c# - Autofac:使用非泛型接口(interface)注册泛型类型

标签 c# generics interface autofac

我正在尝试注册(作为每个请求的实例)通用类型和非通用接口(interface)。 在互联网上我找到了很多相反的例子,但没有一个。

因此,我有一个这样的类:

public class UnitOfWork<TContext> : IUnitOfWork where TContext : DbContext, new()

泛型类,但非泛型接口(interface)。 在 Autofac 中,我试图以这种方式注册:

builder.RegisterGeneric(typeof(UnitOfWork<>)).As<IUnitOfWork>().InstancePerHttpRequest();

但是我得到了错误: 服务“Namespace.UoW.IUnitOfWork”不是开放的通用类型定义。

当然,因为它不是。但是我不知道怎么注册。

谢谢。

最佳答案

你只需要RegisterGeneric如果您还有一个通用接口(interface)。

在您的情况下,您只有一个非通用接口(interface) IUnitOfWork而且只有一个DbContext派生类,这样你就可以注册你的 UnitOfWork<Context>作为普通类型:

builder.RegisterType<UnitOfWork<Context>>()
       .As<IUnitOfWork>().InstanceP‌​erHttp‌​Request();

因此,您的任何类型都在请求 IUnitOfWork会得到 UnitOfWork<Context> .

关于c# - Autofac:使用非泛型接口(interface)注册泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436822/

相关文章:

Java - 接口(interface),实例化一个接口(interface)?

Android 如何判断手指松了

java - 不兼容的类型 : inference variable E#1 has incompatible upper bounds Enum<E#2>

c# - typeof 泛型和强制类型

c# - 有条件地将不同的 json 属性反序列化为相同的模型属性

c# - XPATH 查询以从存储在 SQL Server 数据库列中的 XML 中获取数据

Java泛型问题

asp.net-mvc - ASP.NET MVC - 接口(interface)类型上的自定义模型绑定(bind)器

c# - 我如何在 .net 中转义 html unicode?

c# - "Dispose"是否应该仅用于包含非托管资源的类型?