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