Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error to register Unity in DependencyResolver

Error:

The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.

I saw this question WebApi.UnityDependencyResolver does not implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter : commonServiceLocator but my error is in this line:

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

the complete class:

public static class Bootstrapper
{
    public static void Initialise()
    {
        var container = BuildUnityContainer();
        DependencyResolver.SetResolver(new UnityDependencyResolver(container)); // <-- error
        GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        container.RegisterType<IAutenticacionDbContext, AutenticacionDbContext>();

        return container;
    }
}

Note: With this I get the same error:

    var container = BuildUnityContainer();
    GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
    DependencyResolver.SetResolver(new UnityDependencyResolver(container));
like image 532
andres descalzo Avatar asked Jan 28 '13 05:01

andres descalzo


1 Answers

ASP.Net MVC and Web.API are using two different dependency resolver infrastructure.

Your problem is that you try to use the Unity.WebApi.UnityDependencyResolver also for the MVC controllers. To setup unity correctly follow the instructions below:

To make Unity work with MVC controllers the ones which derives from Controller

  • install the Unity.Mvc3 nuget package
  • setup the dependecy reolver with using DependencyResolver.SetResolver:

    DependencyResolver.SetResolver(
        new Unity.Mvc3.UnityDependencyResolver(container));
    

To make Unity work with the Web.API controllers the ones which derives form ApiController

  • install the Unity.WebAPi nuget package
  • set the dependency resolver with using GlobalConfiguration.Configuration:

    GlobalConfiguration.Configuration.DependencyResolver = 
        new Unity.WebApi.UnityDependencyResolver(container);
    
like image 99
nemesv Avatar answered Nov 15 '22 09:11

nemesv