加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 如何将HttpContext传递给MVC3应用程序中的依赖

发布时间:2020-12-16 09:36:18 所属栏目:asp.Net 来源:网络整理
导读:我在MVC3应用程序中使用Ninject. 我的一个可解析的依赖项使用了HttpContext.Current.Server.MapPath(“?/ App_Data”) 回到我在Global.asax(Application_Start)中初始化IoC容器时,我能够在我的模块配置中定义: .WithConstructorArgument("basePath",HttpCon
我在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工作进程中运行它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读