【问题标题】:What is the Purpose of the FilterScope parameter in Ninject BindFIlter<>?Ninject BindFIlter<> 中 FilterScope 参数的用途是什么?
【发布时间】:2015-08-15 19:21:08
【问题描述】:

请有人解释一下FilterScopeBindFilter&lt;&gt; 方法中的用途?

我正在使用以下内容:

kernel.BindFilter<QuizExists>(System.Web.Mvc.FilterScope.Controller, null).WhenControllerHas<QuizExistsAttribute>();

kernel.BindFilter<QuizExists>(System.Web.Mvc.FilterScope.Action, null).WhenActionMethodHas<QuizExistsAttribute>();

似乎FilterScope 会影响属性的执行顺序,但是还有第二个参数order

什么给了?

【问题讨论】:

    标签: c# asp.net-mvc dependency-injection ninject actionfilterattribute


    【解决方案1】:

    documentation 中的 cmets 非常清楚 FilterScope 的用途。它将过滤器的范围限制为Controller 级别或Action 级别。

    虽然order 参数似乎没有记录在案,但我认为如果多个过滤器应用于单个控制器或操作,它控制应用过滤器的顺序。例如,无论注册顺序如何,您都可以在 LogFilter 之前运行 AuditFilter。如果您将某些过滤器属性直接应用于控制器并通过 Ninject 注册其他过滤器属性,这一点尤其重要 -如果没有这个参数,就无法告诉框架应用它们的顺序。

    【讨论】:

    • 但这没有任何意义,因为过滤器已经属于某种类型,例如IActionFilterIAuthorizationFilter。如果我有一个 FilterScope 无效...有什么想法吗?
    • 是的,过滤器是一种特定类型,但如果您查看(例如)AuthorizeAttribute 是如何注册的,它可以在全局级别(在 GlobalFilters.Filters 中),它将始终运行,将为控制器内的任何操作运行的控制器级别,或操作级别。所有这一切都是在模仿这种行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多