#region License // // Authors: Nate Kohari , Josh Close // Copyright (c) 2007-2009, Enkari, Ltd. // // Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). // See the file LICENSE.txt for details. // #endregion #region Using Directives using System.Linq; using System.Web.Mvc; #endregion namespace Ninject.Web.Mvc { /// /// An that injects filters with dependencies. /// public class NinjectActionInvoker : ControllerActionInvoker { /// /// Gets or sets the kernel. /// public IKernel Kernel { get; private set; } /// /// Initializes a new instance of the class. /// /// The kernel. public NinjectActionInvoker(IKernel kernel) { Kernel = kernel; } /// /// Gets the filters for the specified request and action. /// /// The controller context. /// The action descriptor. /// The filters. protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { FilterInfo filterInfo = base.GetFilters(controllerContext, actionDescriptor); foreach (IActionFilter filter in filterInfo.ActionFilters.Where(f => f != null)) Kernel.Inject(filter); foreach (IAuthorizationFilter filter in filterInfo.AuthorizationFilters.Where(f => f != null)) Kernel.Inject(filter); foreach (IExceptionFilter filter in filterInfo.ExceptionFilters.Where(f => f != null)) Kernel.Inject(filter); foreach (IResultFilter filter in filterInfo.ResultFilters.Where(f => f != null)) Kernel.Inject(filter); return filterInfo; } } }