Search code examples
asp.net-mvc-5unity-containeractionfilterattribute

Implement Unity MVC 5 dependency injection in ActionFilter


I'm trying to inject this user service via Unity (mvc5) in an actionfilter but it is null. How can I implement this?

public class TestFilter : ActionFilterAttribute
{
    // this is always null
    [Dependency]
    public IUserService UserService { get; set; }

    // other members
}

Solution

  • You must register UnityFilterAttributeFilterProvider as a FilterProvider first.

    Modify the App_Start > UnityMvcActivator's Start method like this:

    public static void Start()
    {
        var container = UnityConfig.GetConfiguredContainer();
    
        FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
        FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
    
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    
        Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
    }
    

    If you could not find the method. You probably installed wrong or out of date package. consider installing Install-Package Unity.Mvc on the package manager console.