web-dev-qa-db-ja.com

WebApi.UnityDependencyResolverは、Microsoft.Practices.ServiceLocation.IServiceLocatorを実装していません。パラメーター:commonServiceLocator

次のコードを実行しようとしています。

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

広告には次の例外があります。

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

WebApiパッケージをインストールしようとしましたが、役に立ちませんでした

11
Elad Benda

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で使用)は2つの完全に異なるタイプ(同じ名前であっても)ですが、両方を同じタイプ(UnityDependencyResolver)に割り当てようとしています。動作しません。

25
Darin Dimitrov

同様の問題が発生しましたが、私の場合、私の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);

最初の行でMVCDependencyResolverを使用し、2番目の行でWebApiUnityDependencyResolverを使用します。

11
OaicStef