我尝试注册(作为每个请求的实例)泛型类型和非泛型接口。 在互联网上,我发现了许多相反的例子,但没有这个例子。
因此,我有一个这样的课程:
public class UnitOfWork<TContext> : IUnitOfWork where TContext : DbContext, new()
泛型类,但非泛型接口。 在Autofac中,我试图以这种方式注册:
builder.RegisterGeneric(typeof(UnitOfWork<>)).As<IUnitOfWork>().InstancePerHttpRequest();
但我收到错误: 服务&#39; Namespace.UoW.IUnitOfWork&#39;不是开放的泛型类型定义。
当然,因为事实并非如此。但我不知道如何注册。
感谢。
答案 0 :(得分:6)
如果您还有通用界面,则只需要RegisterGeneric
。
在您的情况下,您只有非通用界面IUnitOfWork
,并且只有一个DbContext
派生类,因此您只需将UnitOfWork<Context>
注册为普通类型:
builder.RegisterType<UnitOfWork<Context>>()
.As<IUnitOfWork>().InstancePerHttpRequest();
因此,请求IUnitOfWork
的任何类型都会获得UnitOfWork<Context>
。