2012-12-23 1 views
6

Ich versuche, den folgenden Code auszuführen:WebApi.UnityDependencyResolver implementiert Microsoft.Practices.ServiceLocation.IServiceLocator nicht. Parameter: 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; 
       } 
      } 
     } 
    } 
} 

Anzeige erhalten die folgende Ausnahme:

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

Ich habe versucht, WebAPI Paket zu installieren, aber es half nicht

Antwort

21

In Ihrer Initialize Methode ersetzen:

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

mit:

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

Jetzt verstehen Sie, was das Problem ist:

System.Web.Http.Dependencies.IDependencyResolver (von dem Web-API verwendet) und System.web.Mvc.IDependencyResolver (von ASP.NET MVC verwendet) sind zwei völlig verschiedene Typen (auch wenn sie haben den gleichen Namen) und dennoch versuchen Sie, beide dem gleichen Typ zuzuordnen (UnityDependencyResolver), der offensichtlich nicht funktionieren kann.

+1

Es war 'GlobalConfiguration.Configuration.DependencyResolver = neu Unity.WebApi.UnityDependencyResolver (Container);' Es hat nicht funktioniert –

+0

Welchen Fehler haben Sie bekommen? Werfen Sie einen Blick auf den folgenden Blog-Post: http://netmvc.blogspot.com/2012/04/dependency-injection-in-aspnet-mvc-4.html –

+3

Ich schrieb: 'GlobalConfiguration.Configuration.DependencyResolver = neue Einheit .WebApi.UnityDependencyResolver (container); ' gleicher Fehler:' Der Typ Unity.WebApi.UnityDependencyResolver scheint Microsoft.Practices.ServiceLocation.IServiceLocator nicht zu implementieren. Parametername: commonServiceLocator' –

7

Ich hatte ein ähnliches Problem, aber in meinem Fall hat meine Webanwendung MVC und WebApi Controller. ich so gelöst:

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

Wo die erste Zeile den MVC DependencyResolver verwenden wird und in der zweiten Zeile verwende ich die WebAPI UnityDependencyResolver.

Verwandte Themen