在MVC过滤器中获取InRequestScope对象

时间:2014-08-25 13:48:59

标签: asp.net filter ninject scopes

据我所知,ASP MVC缓存过滤器 - >所以他们没有绑定在请求范围内,因此,如果我将在其中请求ninject作为对象的实例,我将在完全新的范围内得到它。

在Web-Api中,我可以使用actionContext.Request.GetDependencyScope(),其中actionContext :: HttpActionContext从请求范围中检索对象实例。我已经谷歌搜索了一段时间,我在MVC中找不到类似的东西。所以主要的qustion是::有没有办法检索MVC过滤器中请求范围内绑定的对象实例?

1 个答案:

答案 0 :(得分:1)

我已经了解了Ninject.web.mvcX InRequestScope()的实现。 它使用HttpContext.Current作为范围对象。

这意味着,如果你有

Bind<IFoo>().To<Foo>().InRequestScope();

你可以注入使用

IResolutionRoot.Get<IFoo>()

基本上在HttpContext.Current“有效”的任何时间/任何时间。

要绑定过滤器,您可以使用ninject.web.mvcX nuget包并执行:

BindFilter<FooFilter>(FilterScope.Controller, 0)

这允许您对过滤器使用ctor-injection。另请参阅Ninject Wiki: Dependency Injection for Filters

我不太确定这是否会改变过滤器实例化的时间/次数,但我不这么认为。因此,为了访问过滤器中的InRequestScope()对象,您必须将IResolutionRoot或 - 甚至更好 - 工厂(请参阅ninject.extensions.factory)注入过滤器以创建对象/ object graph。