2012-12-23 12 views
6

मैं निम्नलिखित कोड चलाने का प्रयास: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 पैकेज स्थापित करने की कोशिश की लेकिन यह

मदद नहीं की

उत्तर

21

आपके Initialize विधि में प्रतिस्थापित करें:

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

साथ:

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

अब आप कि समस्या क्या है समझ में:

System.Web.Http.Dependencies.IDependencyResolver (वेब ​​एपीआई द्वारा प्रयुक्त) और System.web.Mvc.IDependencyResolver (ASP.NET MVC द्वारा प्रयुक्त) दो पूरी तरह से अलग अलग प्रकार के कर रहे हैं (भले ही उनके पास एक ही नाम है) और फिर भी आप दोनों को एक ही प्रकार (UnityDependencyResolver) को असाइन करने का प्रयास करते हैं जो स्पष्ट रूप से काम नहीं कर सकता है।

+1

यह 'ग्लोबल कॉन्फ़िगरेशन' कॉन्फ़िगरेशन था। निर्भरता रीसोलवर = नई यूनिटी। वेबएपीआई.इग्निटी निर्भरता रिसेल्वर (कंटेनर); 'यह –

+0

काम नहीं करता है आपको क्या त्रुटि मिली? निम्न ब्लॉग पोस्ट पर एक नज़र डालें: http://netmvc.blogspot.com/2012/04/dependency-injection-in-aspnet-mvc-4.html –

+3

मैंने लिखा: 'वैश्विक कॉन्फ़िगरेशन। कॉन्फ़िगरेशन। निर्भरता रीसोलवर = नई एकता .WebApi.UnityDependencyResolver (कंटेनर); ' एक ही त्रुटि: 'प्रकार Unity.WebApi.UnityDependencyResolver माइक्रोसॉफ्ट को लागू करने के लिए प्रतीत नहीं होता है। व्यवहार। ServiceLocation.IServiceLocator। पैरामीटर नाम: commonServiceLocator' –

7

मुझे एक समान समस्या थी, लेकिन मेरे मामले में मेरे वेब एप्लिकेशन में एमवीसी और वेबएपी नियंत्रक हैं। मैं इस तरह का समाधान:

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

कहाँ पहली पंक्ति MVC DependencyResolver उपयोग करने के लिए जा रहा है और दूसरी पंक्ति में मैं WebAPI UnityDependencyResolver का उपयोग करें।

संबंधित मुद्दे