据我所知,ASP MVC缓存过滤器 - >所以他们没有绑定在请求范围内,因此,如果我将在其中请求ninject作为对象的实例,我将在完全新的范围内得到它。
在Web-Api中,我可以使用actionContext.Request.GetDependencyScope(),其中actionContext :: HttpActionContext从请求范围中检索对象实例。我已经谷歌搜索了一段时间,我在MVC中找不到类似的东西。所以主要的qustion是::有没有办法检索MVC过滤器中请求范围内绑定的对象实例?
答案 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。