用于使用Simple Injector PerWebRequest注册泛型接口和具体类的语法

本文关键字:语法 泛型接口 注册 Simple Injector PerWebRequest 用于 | 更新日期: 2023-09-27 18:31:50

我在PerWebRequest的基础上使用Simple Injector注册通用接口及其具体实现的正确语法时遇到了问题。

这是在Global.asax中向简单注射器容器注册的行,导致错误:

 container.RegisterPerWebRequest<IUnitOfWork<>, UnitOfWork<>>();

为了完整起见,这些是接口和具体的类定义:

public class UnitOfWork<TContext> : IUnitOfWork<TContext>
    where TContext : IContext {
     public UnitOfWork(TContext context) {
     }
}
public interface IUnitOfWork<TContext> where TContext : IContext
{
    TContext Context { get; }
}

我收到错误:来自Visual Studio中的IntelliSense的Type Argument is Missingcontainer.RegisterPerWebRequest上的第一个类型参数:IUnitOfWork<>以红色下划线)

正确的语法应该是什么?

用于使用Simple Injector PerWebRequest注册泛型接口和具体类的语法

您得到的是 C# 编译器错误;C# 编译器(和 CLR)不接受方法参数中的开放泛型。

RegisterPerWebRequest在 v3 中已过时(为了向后兼容,它仍然存在)。最好的方法是这样做:

container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register(typeof(IUnitOfWork<>), typeof(UnitOfWork<>), Lifestyle.Scoped);