如何在 ASP.NET MVC 4 中使用 Autofac 注入 HttpContextBase
本文关键字:Autofac 注入 HttpContextBase ASP NET MVC | 更新日期: 2023-09-27 18:05:50
我正在使用ASP.MVC 4
和Autofac
。
我已经在我的global.asax.cs
文件中注册了以下内容:
ContainerBuilder builder = new ContainerBuilder();
builder.Register(c => c.Resolve<HttpContextBase>().Request)
.As<HttpRequestBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
.As<HttpResponseBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
.As<HttpServerUtilityBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
.As<HttpSessionStateBase>()
.InstancePerHttpRequest();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
在我的家庭控制器中,我有这个(仅用于测试目的(:
private readonly HttpContextBase httpContext;
public HomeController(HttpContextBase httpContext)
{
this.httpContext = httpContext;
}
我在 ASP.NET MVC 3项目中使用了完全相同的代码,并且运行良好。 现在在这个项目中,我遇到了错误。 不知道为什么? 我得到的错误是:
在类型"MyProject.Web.Controllers.HomeController"上找到的"Autofac.Core.Activators.Reflection.DefaultConstructorFinder"的构造函数都不能使用可用的服务和参数调用:无法解析构造函数"Void .ctor(System.Web.HttpContextBase("的参数"System.Web.HttpContextBase httpContext"。 at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable
1 parameters( at Autofac.Core.Resolveving.InstanceLookup.Execute(( at Autofac.Core.Resolveving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable
1 parameters( at Autofac.Core.Registration.ExternalRegistrySource.<</strong>
我不太确定为什么这不起作用? 我需要在第 4 ASP.NET 中以不同的方式做事吗?
我有一个单独的项目,我也想在其中注入HttpContextBase
并且遇到相同的错误。
感谢nemesv
。
我最终替换了:
builder.Register(c => c.Resolve<HttpContextBase>().Request)
.As<HttpRequestBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
.As<HttpResponseBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
.As<HttpServerUtilityBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
.As<HttpSessionStateBase>()
.InstancePerHttpRequest();
。只需:
builder.RegisterModule(new AutofacWebTypesModule());
它现在有效。 不确定有什么区别,但模块中的代码看起来与上面的代码完全相同。