我有 2 个过滤器正在尝试使用 Ninject 的BindFilter<>
语法应用,并且它们的依赖注入成功地应用了它们。问题在于这样一个事实,即一个人会确定当前用户是谁并绑定该用户InRequestScope
,并且在检查维护授权时必须在第二个用户之前运行 - 否则它不知道您指的是哪个用户。
中的过滤器绑定NinjectWebCommon.cs
如下所示:
kernel.BindFilter<CurrentUserFilter>(FilterScope.Global, 0).InRequestScope();
kernel.BindFilter<SetupRightsAttribute>(FilterScope.Controller, 1).WhenControllerType<MaintenanceController>().InRequestScope();
所以在维护控制器中,我希望第一个运行,然后是第二个;在其他所有内容中,只有第一个 - 这很有效,第二个仅在浏览我的维护控制器中的某些内容时使用。
2 个过滤器是这样声明的(不相关的细节除外)
public class CurrentUserFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
// implementation - breakpoint 1
}
public class SetupRightsAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
// implementation - breakpoint 2
}
我希望断点 1 被击中,然后是断点 2,但由于某种原因,它总是首先出现断点 2 - 因为此时它不知道用户,所以它告诉我我没有授权。
我尝试了许多不同的 FilterScope 排列和顺序设置,甚至以不同的顺序绑定它们,但没有任何效果......我做错了什么?