我正在尝试注册(作为每个请求的实例)通用类型和非通用接口(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>().InstancePerHttpRequest();
因此,您的任何类型都在请求 IUnitOfWork
会得到 UnitOfWork<Context>
.
关于c# - Autofac:使用非泛型接口(interface)注册泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436822/