var container = new UnityContainer(); container.RegisterInstance("FilterProvider", new FilterProvider(container)); container.RegisterInstance("LogActionFilter", new TraceActionFilter()); public class FilterProvider : IFilterProvider { private IUnityContainer container; public FilterProvider(IUnityContainer container) { this.container = container; } public IEnumerable GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { foreach (IActionFilter actionFilter in this.container.ResolveAll()) { yield return new Filter(actionFilter, FilterScope.First, null); } } } public class TraceActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.HttpContext.Trace.Write("OnActionExecuted"); filterContext.HttpContext.Trace.Write("Action " + filterContext.ActionDescriptor.ActionName); filterContext.HttpContext.Trace.Write("Controller " + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName); } public void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.HttpContext.Trace.Write("OnActionExecuting"); filterContext.HttpContext.Trace.Write("Action " + filterContext.ActionDescriptor.ActionName); filterContext.HttpContext.Trace.Write("Controller " + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName); } } protected void Application_Start() { Bootstrapper.Initialise(); UnityWebApiActivator.Start(); ConfigureApi(GlobalConfiguration.Configuration); //line added AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } void ConfigureApi(HttpConfiguration config) { var unity = new UnityContainer(); unity.RegisterType(); unity.RegisterType(); unity.RegisterType( new HierarchicalLifetimeManager()); unity.RegisterType( new HierarchicalLifetimeManager()); unity.RegisterType( new HierarchicalLifetimeManager()); unity.RegisterType( new HierarchicalLifetimeManager()); unity.RegisterType( new HierarchicalLifetimeManager()); unity.RegisterType( new HierarchicalLifetimeManager()); config.DependencyResolver = new IoCContainer(unity); //ADDED PARTS var providers = GlobalConfiguration.Configuration.Services.GetFilterProviders().ToList(); config.Services.Add( typeof(System.Web.Http.Filters.IFilterProvider), new Filter2Provider(UnityConfig.GetConfiguredContainer())); var defaultprovider = providers.First(p => p is System.Web.Http.Filters.ActionDescriptorFilterProvider); config.Services.Remove(typeof(System.Web.Http.Filters.IFilterProvider), defaultprovider); } public class UnityActionFilterProvider : System.Web.Http.Filters.ActionDescriptorFilterProvider, System.Web.Http.Filters.IFilterProvider { private readonly IUnityContainer container; public UnityActionFilterProvider(IUnityContainer container) { this.container = container; } public new IEnumerable GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor) { foreach (IActionFilter actionFilter in container.ResolveAll()) { // TODO: Determine correct FilterScope yield return new FilterInfo(actionFilter, FilterScope.Global); } } } var providers = GlobalConfiguration.Configuration.Services.GetFilterProviders().ToList(); GlobalConfiguration.Configuration.Services.Add( typeof(System.Web.Http.Filters.IFilterProvider), new UnityActionFilterProvider(UnityConfig.GetConfiguredContainer())); var defaultprovider = providers.First(p => p is ActionDescriptorFilterProvider); GlobalConfiguration.Configuration.Services.Remove( typeof(System.Web.Http.Filters.IFilterProvider), defaultprovider);