Search code examples
asp.net-mvc-4mef

ASP:NET MVC 4 + MEF


I created an application based on this article : mef-in-aspnet-mvc-4-and-webapi

It is a nice solution but how I can inject a dependency into an ActionFilter?


Solution

  • Finally, I found the solution for this problem.

    First I had to create an own FilterProvider class:

     public class FilterProvider : FilterAttributeFilterProvider
    {
        private readonly CompositionContainer _compositionContainer;
    
        public FilterProvider(CompositionContainer compositionContainer)
        {
            _compositionContainer = compositionContainer;
        }
    
        protected override IEnumerable<FilterAttribute> GetActionAttributes(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            var attributes = base.GetActionAttributes(controllerContext,
                                                  actionDescriptor);
            foreach (var attribute in attributes)
            {
                _compositionContainer.ComposeParts(attribute);
            }
    
            return attributes;
        }
    }
    

    And I had to add this class to FilterProviders collection:

     var provider = new FilterProvider(container);
            FilterProviders.Providers.Add(provider);
    

    using this I can inject any dependencies into a custom ActionFilter using import attribute.