在DependencyResolver中注册Unity出现错误

6

错误:

Unity.WebApi.UnityDependencyResolver 类型似乎没有实现 Microsoft.Practices.ServiceLocation.IServiceLocator 接口。

我看到了这个问题WebApi.UnityDependencyResolver does not implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter : commonServiceLocator,但我的错误出现在这一行:

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

完整的类:
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;
    }
}

注意:使用此方法我得到了相同的错误:

    var container = BuildUnityContainer();
    GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
    DependencyResolver.SetResolver(new UnityDependencyResolver(container));

你正在使用哪些与Unity相关的NuGet包? - nemesv
安装 Unity.WebAPI 包 - andres descalzo
1个回答

5
ASP.Net MVC和Web.API使用两种不同的依赖项解析器基础设施。
您的问题在于,您尝试将Unity.WebApi.UnityDependencyResolver用于MVC控制器。要正确设置Unity,请按照以下说明操作:
要使Unity与继承自Controller的MVC控制器一起工作,请执行以下操作:
  • install the Unity.Mvc3 nuget package
  • setup the dependecy reolver with using DependencyResolver.SetResolver:

    DependencyResolver.SetResolver(
        new Unity.Mvc3.UnityDependencyResolver(container));
    
为了使Unity与Web.API控制器配合,需要对继承自ApiController的控制器进行配置。
  • install the Unity.WebAPi nuget package
  • set the dependency resolver with using GlobalConfiguration.Configuration:

    GlobalConfiguration.Configuration.DependencyResolver = 
        new Unity.WebApi.UnityDependencyResolver(container);
    

你的解决方案解决了我的问题,但我看到了这个链接“http://netmvc.blogspot.com.ar/2012/04/dependency-injection-in-aspnet-mvc-4.html”,然后我删除了“Unity.Mvc3”和“Unity.WebAPI”包,重新安装后,最终它正常工作了。我只是想评论一下,这是完整的解决方案。 - andres descalzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接