0

一部のコントローラーでアクションフィルターを使用していますが、それが何をするのかは関係ありませんが、依存性注入にNinjectを使用しています。コントローラー コンストラクターとアクション フィルター コンストラクターにブレークポイントを設定したところ、1 つの要求に対して、コントローラーのコンストラクターが 1 回呼び出され、アクション フィルターが 8 回呼び出されることがわかりました。次のコードは、この回答で与えられたものと実質的に同じ効果を生み出します。

属性:

public class NotificationAttribute : Attribute { }

public class NotificationActionFilter : IActionFilter
{
    private IUnitOfWork _unitOfWork;

    public NotificationActionFilter(IUnitOfWork uow)
    {
        _unitOfWork = uow;
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // do stuff
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {

    }
}

バインディング:

kernel.BindFilter<NotificationActionFilter>(FilterScope.Controller, 0).WhenControllerHas<NotificationAttribute>();

コントローラ:

[NotificationAttribute]
public class TestController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

常に正確に 8 ですが、その理由はわかりません。誰かが以前に似たようなことを扱ったかもしれないことを願って、私は本当にこれについて私の髪を引っ張ってきました.

4

0 に答える 0