如果通过 WebActivator 初始化 IoC 容器,则解决 Global.asax 中的依赖关系

发布于 2025-01-02 01:21:43 字数 439 浏览 1 评论 0原文

在 ASP.NET MVC3 应用程序中,我通过 A 类 NinjectMVC3 初始化 Ninject IoC 容器,

[assembly : WebActivator.PreApplicationStartMethod( typeof (NinjectMVC3), "Start" )]

该类负责我的 IoC 容器 Kernel 初始化。

调用此函数后,所有通过构造函数变量声明可解析依赖项的控制器都可以很好地解析它们。

但我需要在 Global.asax Application_Start 方法中使用已解析的依赖项,将其提供给我的一些自定义全局过滤器?在我的场景中,如何解决 Application_Start 中的依赖关系?

In an ASP.NET MVC3 application, I initialize a Ninject IoC container through a

[assembly : WebActivator.PreApplicationStartMethod( typeof (NinjectMVC3), "Start" )]

A class NinjectMVC3 is responsible for my IoC container Kernel initialization.

After this is called, all controllers, that declare resolvable dependencies through a constructor variables get them resolved just fine.

But I need to use a resolved dependency in Global.asax Application_Start method, to feed it to some Custom Global Filters of mine? How can I resolve dependencies in Application_Start in my scenario?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千鲤 2025-01-09 01:21:43

您可以使用DependencyResolver.Current.GetService()

You can use DependencyResolver.Current.GetService<T>()

怪我入戏太深 2025-01-09 01:21:43

在这种情况下,您应该选择不同的方式。将依赖项直接注入到过滤器中,而不是首先将它们分配给全局 asax。这样你就可以同时解决两个问题:

  1. 全局 asax 不需要知道那些它自己不需要的依赖项。您应该避免对对象的依赖,只要您可以将它们直接分配给该对象,这些对象就可以将它们传递给其他组件。
  2. 您不需要使用属性注入或服务位置来将它们放入全局 asax

Ninject.MVC3 扩展的文档显示了如何使用 Ninject 创建过滤器,以便您可以为它们进行构造函数注入:

https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-filters

In this case you should choose a different way. Inject the dependencies directly to your filters instead of assigning them to the global asax first. This way you solve two problems at once:

  1. The global asax does not need to know about those dependencies that it does not need itsself. You should avoid to have dependencies on objects that are just there to pass them on to other components whenever you can directly assign them to this object.
  2. You don't need to use Property injection or service location to get them into the global asax

The documentation of the Ninject.MVC3 extensions shows how you can create the filters using Ninject so that you can do constructor injection for them:

https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-filters

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文