Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET MVC 4中使用Autofac注入HttpContextBase_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Autofac - Fatal编程技术网

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

C# 如何在ASP.NET MVC 4中使用Autofac注入HttpContextBase,c#,asp.net,asp.net-mvc,asp.net-mvc-4,autofac,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Autofac,我使用的是ASP.mvc4和Autofac 我已在我的global.asax.cs文件中注册了以下内容: ContainerBuilder builder = new ContainerBuilder(); builder.Register(c => c.Resolve<HttpContextBase>().Request) .As<HttpRequestBase>() .InstancePerHttpRequest(); builder.Re

我使用的是
ASP.mvc4
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();
我在一个ASP.NETMVC3项目中使用了完全相同的代码,效果很好。现在在这个项目中,我遇到了一些错误。不知道为什么?我得到的错误是:


在类型“MyProject.Web.Controllers.HomeController”上找到的具有“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数都不能使用可用服务和参数调用:无法解析构造函数“Void.ctor(System.Web.HttpContextBase)”的参数“System.Web.HttpContextBase httpContext”。Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable1参数)处的Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable1参数)处的Autofac.Core.Resolving.InstanceLookup.Execute(),Autofac.Core.Resolving.Resolving.ResolvingOperation.GetOrCreateInstanceAutofac.Core.Resolving.InstanceLookup.ResolveComponent(ISharingLifetimeScope currentOperationScope,IComponentRegistration,IEnumerable
1参数)的Autofac.Core.registration.ExternalRegistrarySource(ISharingLifetimeScope,IComponentRegistration,IEnumerable
1参数)。多亏了
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();

它现在可以工作了。不确定区别是什么,但模块中的代码看起来与上面我的代码完全相同。

我看不出在您的代码中您在哪里注册
HttpContextBase
本身…尝试使用
builder.RegisterModule(新的AutofacWebTypesModule())注册
AutofacWebTypesModule
)是的,我现在在他们的网站上看到了这一点。我是否先注册
AutofacWebTypesModule
然后再注册
builder.register(c=>c.Resolve().Request)
。?在这种情况下,注册顺序应该无关紧要。如果你查看的源代码,你会发现你漏掉了最重要的一行
builder.register(c=>newhttpcontextwrapper(HttpContext.Current)).As().instanceperhtprequest();
它注册了
HttpContextBase
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());