NinjectのBindFilter<>
構文を使用して適用しようとしている2つのフィルターがあり、それらは依存性注入で正常に適用されています。問題は、現在のユーザーが誰であるかを分類してバインドしInRequestScope
、メンテナンス認証を確認するときに2番目のユーザーの前に実行する必要があるという事実にあります。そうでない場合は、参照しているユーザーがわかりません。
のフィルター結合はNinjectWebCommon.cs
次のようになります。
kernel.BindFilter<CurrentUserFilter>(FilterScope.Global, 0).InRequestScope();
kernel.BindFilter<SetupRightsAttribute>(FilterScope.Controller, 1).WhenControllerType<MaintenanceController>().InRequestScope();
したがって、メンテナンスコントローラでは、最初のコントローラを実行してから2番目のコントローラを実行する必要があります。他のすべてでは、最初のものだけです-これは機能します。2番目のものは、メンテナンスコントローラーで何かを参照するときにのみ使用されます。
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と順序設定のさまざまな順列を試しましたが、それらを異なる順序でバインドすることもできましたが、何も機能しません...何が間違っているのでしょうか。