【问题标题】:WebApi.UnityDependencyResolver does not implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter : commonServiceLocatorWebApi.UnityDependencyResolver 未实现 Microsoft.Practices.ServiceLocation.IServiceLocator。参数:commonServiceLocator
【发布时间】:2012-12-23 16:46:57
【问题描述】:

我尝试运行以下代码:

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;
                }
            }
        }
    }
}

ad 得到以下异常:

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

我尝试安装 webApi 包,但没有帮助

【问题讨论】:

    标签: c# asp.net asp.net-mvc-4 asp.net-web-api unity-container


    【解决方案1】:

    在您的Initialize 方法中替换:

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

    与:

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

    现在你明白问题所在了:

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

    【讨论】:

    • 原来是GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 没用
    • 你遇到了什么错误?看看下面的博文:netmvc.blogspot.com/2012/04/…
    • 我写道:` GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);` 同样的错误:The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter name: commonServiceLocator
    • 您的项目引用/NuGet 似乎搞砸了。阅读我链接到的博文,并在一个新项目上尝试一下:netmvc.blogspot.com/2012/04/… 一步一步来。
    • 请添加 nuget 包“Unity.WebAPI”以使其工作。
    【解决方案2】:

    我遇到了类似的问题,但就我而言,我的 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。

    【讨论】:

    • 这个答案效果很好,但是在使用哪个库方面使代码更加明确可能会让后来的人更清楚。 DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多