Autofac:使用非通用接口注册泛型类型

时间:2014-03-16 12:27:39

标签: c# generics interface autofac

我尝试注册(作为每个请求的实例)泛型类型和非泛型接口。 在互联网上,我发现了许多相反的例子,但没有这个例子。

因此,我有一个这样的课程:

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

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

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

但我收到错误: 服务&#39; Namespace.UoW.IUnitOfWork&#39;不是开放的泛型类型定义。

当然,因为事实并非如此。但我不知道如何注册。

感谢。

1 个答案:

答案 0 :(得分:6)

如果您还有通用界面,则只需要RegisterGeneric

在您的情况下,您只有非通用界面IUnitOfWork,并且只有一个DbContext派生类,因此您只需将UnitOfWork<Context>注册为普通类型:

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

因此,请求IUnitOfWork的任何类型都会获得UnitOfWork<Context>

相关问题