2012-12-23 11 views
6

provo a eseguire il codice seguente:WebApi.UnityDependencyResolver non implementa Microsoft.Practices.ServiceLocation.IServiceLocator. Parametro: 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; 
       } 
      } 
     } 
    } 
} 

ad ottenere la seguente eccezione:

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

Ho provato ad installare il pacchetto WebAPI ma non ha aiutato

risposta

21

Nel tuo metodo Initialize sostituire:

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

con:

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

Ora si capisce qual è il problema:

System.Web.Http.Dependencies.IDependencyResolver (utilizzato dal Web API) e System.web.Mvc.IDependencyResolver (utilizzato da ASP.NET MVC) sono due tipi completamente diversi (anche se hanno lo stesso nome) eppure si tenta di assegnarli entrambi allo stesso tipo (UnityDependencyResolver) che ovviamente non possono funzionare.

+1

Era 'GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver (container);' non ha funzionato –

+0

Che errore hai ottenuto? Date un'occhiata al seguente post sul blog: http://netmvc.blogspot.com/2012/04/dependency-injection-in-aspnet-mvc-4.html –

+3

Ho scritto: 'GlobalConfiguration.Configuration.DependencyResolver = new Unity .WebApi.UnityDependencyResolver (container); ' stesso errore:' Il tipo Unity.WebApi.UnityDependencyResolver non sembra implementare Microsoft.Practices.ServiceLocation.IServiceLocator. Nome parametro: commonServiceLocator' –

7

Avevo un problema simile, ma nel mio caso la mia applicazione web ha controller MVC e WebApi. ho risolto in questo modo:

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

Dove la prima linea sta per utilizzare il MVC DependencyResolver e nella seconda riga uso il WebAPI UnityDependencyResolver.

Problemi correlati