C# WebApi.UnityDependencyResolver未实现Microsoft.Practices.ServiceLocation.IServiceLocator。参数:commonServiceLocator

C# WebApi.UnityDependencyResolver未实现Microsoft.Practices.ServiceLocation.IServiceLocator。参数:commonServiceLocator,c#,asp.net,asp.net-mvc-4,asp.net-web-api,unity-container,C#,Asp.net,Asp.net Mvc 4,Asp.net Web Api,Unity Container,我尝试运行以下代码: using System.Web.Http; using System.Web.Mvc; using Conduit.Mam.ClientSerivces.Dal.Configuration; using MamInfrastructure.Common.Dal; using MamInfrastructure.Common.Logger; using MamInfrastructure.Logger; using Microsoft.Practices.Unity; us

我尝试运行以下代码:

using System.Web.Http;
using System.Web.Mvc;
using Conduit.Mam.ClientSerivces.Dal.Configuration;
using MamInfrastructure.Common.Dal;
using MamInfrastructure.Common.Logger;
using MamInfrastructure.Logger;
using Microsoft.Practices.Unity;
using Unity.WebApi;

namespace Conduit.Mam.ClientServices.Common.Initizliaer
{
    public static class Initializer
    {
        private static bool isInitialize;
        private static readonly object LockObj = new object();
        private static IUnityContainer defaultContainer = new UnityContainer();

        static Initializer()
        {
            Initialize();
        }

        public static void Initialize()
        {
            if (isInitialize)
                return;

            lock (LockObj)
            {
                IUnityContainer container = defaultContainer;

                //registering Unity for web API
                GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
                //registering Unity for MVC
                DependencyResolver.SetResolver(new UnityDependencyResolver(container));

                container.RegisterType<IDal<ClientService.DAL.EntityFramework.MamConfiguration>, MamConfigurationDal>();
                container.RegisterType<IApplicationLogger, Log4NetLogger>();

                if (!isInitialize)
                {
                    isInitialize = true;
                }
            }
        }
    }
}
使用System.Web.Http;
使用System.Web.Mvc;
使用导管.Mam.ClientSerivces.Dal.Configuration;
使用mainfrastructure.Common.Dal;
使用mainfrastructure.Common.Logger;
使用mamfrastructure.Logger;
使用Microsoft.Practices.Unity;
使用Unity.WebApi;
命名空间conductor.Mam.ClientServices.Common.Initizliaer
{
公共静态类初始值设定项
{
私有静态布尔初始化;
私有静态只读对象LockObj=新对象();
私有静态IUnityContainer defaultContainer=new UnityContainer();
静态初始值设定项()
{
初始化();
}
公共静态void Initialize()
{
如果(i初始化)
返回;
锁(LockObj)
{
IUnityContainer容器=默认容器;
//为web API注册Unity
GlobalConfiguration.Configuration.DependencyResolver=新的UnityDependencyResolver(容器);
//为MVC注册Unity
SetResolver(新UnitedDependencyResolver(容器));
container.RegisterType();
container.RegisterType();
如果(!i初始化)
{
isInitialize=true;
}
}
}
}
}
ad获取以下异常:

类型Unity.WebApi.UnityDependencyResolver似乎未实现Microsoft.Practices.ServiceLocation.IServiceLocator。
参数名称:commonServiceLocator


我已尝试安装webApi软件包,但在您的
初始化
方法替换中它没有帮助:

GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
与:

现在您了解了问题所在:


(由Web API使用)和(由ASP.NET MVC使用)是两种完全不同的类型(即使它们具有相同的名称),但您试图将它们分配给相同的类型(
UnityDependencyResolver
),这显然无法工作。

我也有类似的问题,但在我的情况下,我的Web应用程序具有MVC和WebApi控制器。 我决定这样做:

using Microsoft.Practices.Unity;
using System.Web.Http;
using System.Web.Mvc;
using Unity.Mvc5;

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

第一行将使用MVC DependencyResolver,第二行使用WebApi UnityDependencyResolver。

它是
GlobalConfiguration.Configuration.DependencyResolver=new Unity.WebApi.UnityDependencyResolver(容器)它不起作用您遇到了什么错误?看看下面的博文:我写道:`GlobalConfiguration.Configuration.dependencysolver=newunity.WebApi.unitydependencysolver(container)`相同错误:
类型Unity.WebApi.unitydependencysolver似乎未实现Microsoft.Practices.ServiceLocation.IServiceLocator。参数名称:commonServiceLocator
您似乎把项目引用/NUGET搞砸了。阅读我链接到的博客文章,并在一个新项目上尝试它:一步一步地跟随它。请添加nuget包“Unity.WebAPI”以使其工作。这个答案很好,但让代码在使用哪个库方面稍微明确一点可能会让后面的人更清楚。DependencyResolver.SetResolver(新Unity.Mvc5.UnityDependencyResolver(容器));GlobalConfiguration.Configuration.DependencyResolver=新的Unity.WebApi.UnityDependencyResolver(容器);
using Microsoft.Practices.Unity;
using System.Web.Http;
using System.Web.Mvc;
using Unity.Mvc5;

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