asp.net-mvc-3 – 如何将HttpContext传递给MVC3应用程序中的依赖
我在MVC3应用程序中使用Ninject.
我的一个可解析的依赖项使用了HttpContext.Current.Server.MapPath(“?/ App_Data”) 回到我在Global.asax(Application_Start)中初始化IoC容器时,我能够在我的模块配置中定义: .WithConstructorArgument("basePath",HttpContext.Current.Server.MapPath("~/App_Data")); 由于我的模块是从与Application相同的线程初始化的,因此HttContext.Current不为null. 然后我不得不使用WebActivator将我的依赖注入初始化移动到PreAppStart方法.由于在这种情况下HttContext尚不可用,我不得不删除我的dep的参数初始化. 我在运行时通过在类实例中解析HttpContext解决了这个问题.但事实证明只有从请求线程调用实例才有可能.一旦我将已解析的实例调用移动到一个单独的线程(不是停止控制器的ActionResult生成),我就遇到了同样的问题 – 不再能够获得HttpContext.我怎样才能在我的场景中解决它? 附:刚想通了我仍然可以从Global.asax应用程序启动我的依赖项上调用一个方法并从那里提供HttpContext.不过,让我知道哪种方法最好. 解决方法
在Ninject中应该有一种方法可以使用委托以惰性方式注册依赖项.这样,它只会在您访问依赖项时解析它.
以下是我使用StructureMap的方法: For<HttpContextBase>().Use(c => new HttpContextWrapper(HttpContext.Current)); 至于从不同的线程访问HttpContext,您可以使用AsyncManager.Sync(d)方法接受委托并在ASP .NET工作进程中运行它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – “更新/取消”按钮不会出现在TemplateField Edi
- asp.net-core – 如何使用FluentValidation.AspNetCore和Fl
- asp.net-mvc-4 – 在ASP.NET MVC中包文件位置
- asp.net-mvc – 使用存储库模式来支持多个提供程序
- asp.net-mvc – ASP.NET Core TestServer为Razor视图生成HT
- asp.net fileupload控件上传文件与多文件上传
- asp.net-mvc – EnumDataType属性在ASP.NET MVC中有什么作用
- 禁用ASP.NET EventValidation
- 在ASP.NET网站中使用单例连接是一个好主意
- asp.net – Repeater控件中的水平方向
- ASP.Net MVC的ViewBag一个坑,不要跳进去
- ASP.NET Core 2.1身份:如何删除默认UI剃刀页面?
- asp.net-mvc-4 – MVC4/DotNetOpenAuth中的自定义
- ASP.NET-MVC(IIS6)高流量时出错:指定的强制转换
- asp.net-mvc-2 – 使用.Net Framework 4.0的Shar
- asp.net – 从代码后面添加文本框服务器控件?
- asp.net – 使用DependencyResolver进行MVC 3的C
- ASP.NET总结
- asp.net-mvc-5 – 使用MVC属性路由的每个控制器的
- asp.net – Mscaptcha在本地运行良好,但图片没有