2012-12-23 4 views
6

私は、次のコードを実行しよう:私はWEBAPIパッケージをインストールしようとしたが、それはWebApi.UnityDependencyResolverは、Microsoft.Practices.ServiceLocation.IServiceLocatorを実装していません。パラメータ:commonServiceLocator

を助けなかった

The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter name: 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; 
       } 
      } 
     } 
    } 
} 

広告は、次の例外を取得

答えて

21

Initializeの方法では、次のように置き換えます。

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

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

は今、あなたは、問題が何であるかを理解する:(ASP.NET MVCで使用される)

System.Web.Http.Dependencies.IDependencyResolver(ウェブAPIで使用される)とSystem.web.Mvc.IDependencyResolverは、2つの完全に異なる種類があります(たとえ彼らは同じ名前を持っていますが)あなたは明らかに動作しない同じタイプ(UnityDependencyResolver)にそれらの両方を割り当てようとします。

+1

これは 'GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);'それは動作しませんでした –

+0

あなたはどんなエラーがありましたか?次のブログ記事を見てください:http://netmvc.blogspot.com/2012/04/dependency-injection-in-aspnet-mvc-4.html –

+3

私は次のように書いています: 'GlobalConfiguration.Configuration.DependencyResolver = new Unity .WebApi.UnityDependencyResolver(container); ' 同じエラー:' Unity.WebApi.UnityDependencyResolver型は、Microsoft.Practices.ServiceLocation.IServiceLocatorを実装するようには見えません。 パラメータ名:commonServiceLocator' –

7

私も同様の問題がありましたが、私の場合はWebアプリケーションにMVCとWebApiコントローラがあります。 私はこのように解決:最初の行はMVC DependencyResolverを使用しようとしている

​​

は、2行目で、私はWEBAPI UnityDependencyResolverを使用しています。