2012-12-23 15 views
6
Ben aşağıdaki kodu çalıştırmayı deneyin

:WebApi.UnityDependencyResolver, Microsoft.Practices.ServiceLocation.IServiceLocator uygulamıyor. Parametre: 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; 
       } 
      } 
     } 
    } 
} 

reklamda şu istisna olsun:

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

Ben WebAPI paketini yüklemeyi denedi ama

yardımcı olmadı

cevap

21

Initialize yönteminize göre

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

: (bile

(Web API tarafından kullanılan) System.Web.Http.Dependencies.IDependencyResolver ve System.web.Mvc.IDependencyResolver (ASP.NET MVC tarafından kullanılır) birbirinden tamamen farklı iki türde gibidir:

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

Şimdi sorunun ne olduğunu anlamak aynı ada sahipler) ve her ikisini de açıkça çalışamayan aynı türlere (UnityDependencyResolver) atamaya çalışıyorsunuz.

+1

'GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver (container);' işe yaramadı –

+0

Hangi hatayı aldınız? Aşağıdaki blog gönderisine bir göz atın: http://netmvc.blogspot.com/2012/04/dependency-injection-in-aspnet-mvc-4.html –

+3

Yazdığım: GlobalConfiguration.Configuration.DependencyResolver = new Unity .WebApi.UnityDependencyResolver (container); aynı hata: 'Unity.WebApi.UnityDependencyResolver, Microsoft.Practices.ServiceLocation.IServiceLocator uygulamak için görünmüyor. Parametre adı: commonServiceLocator' –

7

Benzer bir sorunla karşılaştım, ancak benim durumumda web uygulamasında MVC ve WebApi Denetleyicileri var. Böyle çözüldü: İlk satır MVC DependencyResolver kullanacak

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

ve ikinci satırda ben WebAPI UnityDependencyResolver kullanın.