为单个控制器重复调用动作过滤器构造函数

时间:2012-07-04 17:51:20

标签: asp.net-mvc asp.net-mvc-3 ninject

我在我的一些控制器上使用了一个动作过滤器,与它的作用无关,它使用Ninject进行依赖注入。我在控制器构造函数和动作过滤器构造函数中设置了断点,我发现对于单个请求,控制器的构造函数被调用一次,动作过滤器被调用8次。以下代码产生的效果与this answer中给出的效果几乎相同。

属性:

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,但我不知道为什么。我真的一直把头发拉过这个,只是希望有人可能以前处理过类似的东西。

0 个答案:

没有答案