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

本文关键字:注册 泛型类型 泛型接口 Autofac | 更新日期: 2023-09-27 17:50:25

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

因此,我有一个这样的类:
public class UnitOfWork<TContext> : IUnitOfWork where TContext : DbContext, new()

泛型类,但非泛型接口。在Autofac中,我试图这样注册:

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

但是我得到错误:服务的名称空间。IUnitOfWork'不是一个开放泛型类型定义。

当然,因为它不是。但是我不知道如何注册。

谢谢。

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

如果您也有通用接口,则只需要RegisterGeneric

在您的情况下,您只有一个非泛型接口IUnitOfWork,也只有一个DbContext派生类,因此您可以将UnitOfWork<Context>注册为正常类型:

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

所以你的任何类型请求一个IUnitOfWork将得到一个UnitOfWork<Context>