WebApi.UnityDependencyResolver不实现Microsoft.Practices.ServiceLocation.IServiceLocator.参数:commonServiceLocator

Ela*_*nda 11 c# asp.net unity-container asp.net-mvc-4 asp.net-web-api

我尝试运行以下代码:

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;
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

广告获得以下异常:

The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter name: commonServiceLocator

我试图安装webApi包但它没有帮助

Dar*_*rov 25

在你的Initialize方法中替换:

GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

有:

GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

现在您了解问题所在:

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

  • 我写道:`GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);`相同的错误:`类型Unity.WebApi.UnityDependencyResolver似乎没有实现Microsoft.Practices.ServiceLocation.IServiceLocator.参数名称:commonServiceLocator` (3认同)
  • 请添加 nuget 包“Unity.WebAPI”以使其正常工作。 (2认同)

小智 11

我有一个类似的问题,但在我的情况下,我的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);
Run Code Online (Sandbox Code Playgroud)

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