gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:35:15 27 4
gpt4 key购买 nike

我在 MVC3 应用程序中使用 Ninject。

我的一个可解析依赖项使用了 HttpContext.Current.Server.MapPath("~/App_Data")
当我在 Global.asax (Application_Start) 中初始化 IoC 容器时,我能够在我的模块配置中定义:

.WithConstructorArgument("basePath", HttpContext.Current.Server.MapPath("~/App_Data"));

由于我的模块是从与应用程序相同的线程初始化的, HttContext.Current不为空。

然后我不得不使用 WebActivator 将我的依赖注入(inject)初始化移动到 PreAppStart 方法。 .由于 HttContext 在这种情况下尚不可用,因此我不得不删除我的 dep.xml 的参数初始化。

我通过解决 HttpContext 解决了这个问题。在运行时在我的类实例中。但事实证明,只有从请求线程调用实例才有可能。一旦我将已解决的实例调用移动到单独的线程(不要停止 Controller 的 ActionResult 生成),我就遇到了同样的问题 - 不再能够获得 HttpContext .如何在我的场景中解决它?

附言刚刚发现我仍然可以从 Global.asax Application start 调用我的依赖项的方法并提供 HttpContext从那里。不过,让我知道哪种方法是最好的方法。

最佳答案

Ninject 中应该有一种方法可以使用委托(delegate)以惰性方式注册依赖项。这样它只会在您访问依赖项时解决它。

这是我使用 StructureMap 的方法:

For<HttpContextBase>().Use(c => new HttpContextWrapper(HttpContext.Current));

至于从不同的线程访问 HttpContext,您可以使用 AsyncManager.Sync(d) 方法,该方法接受一个委托(delegate)并在 ASP .NET 工作进程中运行它。

关于asp.net-mvc-3 - 如何将 HttpContext 传递给 MVC3 应用程序中的依赖项初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com