首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.NET MVC4中使用Autofac注入HttpContextBase

如何在ASP.NET MVC4中使用Autofac注入HttpContextBase
EN

Stack Overflow用户
提问于 2013-03-26 20:49:43
回答 1查看 11.2K关注 0票数 21

我使用的是ASP.MVC 4Autofac

我已经在我的global.asax.cs文件中注册了以下内容:

代码语言:javascript
复制
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();

在我的家庭控制器中,我有这个(仅用于测试目的):

代码语言:javascript
复制
private readonly HttpContextBase httpContext;

public HomeController(HttpContextBase httpContext)
{
     this.httpContext = httpContext;
}

我在一个ASP.NET MVC3项目中使用了完全相同的代码,它工作得很好。现在,在这个项目中,我得到了错误。不知道为什么?我得到的错误是:

无法使用可用的服务和参数调用在类型“”MyProject.Web.Controllers.HomeController“”上使用'Autofac.Core.Activators.Reflection.DefaultConstructorFinder‘找到的任何构造函数:无法解析构造函数“.ctor(System.Web.HttpContextBase)”的参数“”System.Web.HttpContextBase httpContext“”。“”在Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext上下文中,IEnumerable**1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable**1参数)在Autofac.Core.Registration.ExternalRegistrySource.<处的Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope处的Autofac.Core.Resolving.InstanceLookup.Execute()处,IComponentRegistration注册,IEnumerable**1 parameters) at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable**1参数

我不太确定为什么这不起作用?我需要在ASP.NET 4中做一些不同的事情吗?

我有一个单独的项目,我也想在其中注入HttpContextBase,但我得到了相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-26 22:17:38

感谢nemesv

我最终替换了:

代码语言:javascript
复制
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();

...with只需:

代码语言:javascript
复制
builder.RegisterModule(new AutofacWebTypesModule());

它现在起作用了。不知道有什么不同,但是模块中的代码看起来和我上面的完全一样。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15637491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档