用于使用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 Missing
(container.RegisterPerWebRequest
上的第一个类型参数:IUnitOfWork<>
以红色下划线)
正确的语法应该是什么?
您得到的是 C# 编译器错误;C# 编译器(和 CLR)不接受方法参数中的开放泛型。
该RegisterPerWebRequest
在 v3 中已过时(为了向后兼容,它仍然存在)。最好的方法是这样做:
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register(typeof(IUnitOfWork<>), typeof(UnitOfWork<>), Lifestyle.Scoped);