如何在 ASP.NET MVC 4 中使用 Autofac 注入 HttpContextBase

本文关键字:Autofac 注入 HttpContextBase ASP NET MVC | 更新日期: 2023-09-27 18:05:50

我正在使用ASP.MVC 4Autofac

我已经在我的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并且遇到相同的错误。

如何在 ASP.NET MVC 4 中使用 Autofac 注入 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());

它现在有效。 不确定有什么区别,但模块中的代码看起来与上面的代码完全相同。