一部のコントローラーでアクションフィルターを使用していますが、それが何をするのかは関係ありませんが、依存性注入に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 ですが、その理由はわかりません。誰かが以前に似たようなことを扱ったかもしれないことを願って、私は本当にこれについて私の髪を引っ張ってきました.