2012-09-05 12 views
17

साथ काम नहीं कर रहा एपीआई मैं इस तरह autofac से MVC एकीकरण का प्रयोग किया:MVC वेब Autofac एकता

... 
var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

लेकिन अब मैं नई वेब एपीआई आरटीएम साथ समाधान से बनाना चाहते हैं। और मैं नई AutofacWebApiDependencyResolver कक्षा का उपयोग करना चाहता हूं।

लेकिन मैं यह त्रुटि आई अगर मैं AutofacWebApiDependencyResolver के साथ ऐसा कर:

The type Autofac.Integration.WebApi.AutofacWebApiDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.

मैंने पढ़ा है मैं समाधानकर्ता स्थापित करने के लिए अब यह करने के लिए है:

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

लेकिन मैं के साथ सेट करता है, तो '=', यह सेट नहीं है। यह अभी भी DefaultResolver ...

यदि मैं फिर से एमवीसी ऑटोफैक पर निर्भरता रीसोलवर कक्षा का उपयोग करता हूं, तो यह काम करता है।

अभी भी ऑटोफैक और वेब एपीआई आरटीएम के साथ समस्याएं हैं? (वर्तमान एकीकरण आर सी संस्करण है)

उत्तर

44

ASP.Net Wep.API और ASP.NET MVC का उपयोग करता है दो अलग अलग IDependencyResolver (क्योंकि वे Wep.API ASP.NET MVC पर निर्भर नहीं करने के लिए डिज़ाइन) ताकि आप दोनों सेटअप करने की जरूरत है :

var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
GlobalConfiguration.Configuration.DependencyResolver = 
    new AutofacWebApiDependencyResolver(container); 

तो AutofacDependencyResolver नियमित MVC Controller व्युत्पन्न नियंत्रकों के शिष्टाचार इंजेक्षन की जरूरत है।

और AutofacWebApiDependencyResolver वेब पर निर्भरताओं को इंजेक्ट करने के लिए आवश्यक है। एपीआई ApiController व्युत्पन्न नियंत्रक।

और भूल नहीं है कॉल के साथ अपने कंटेनर निर्माता में अपना एपीआई नियंत्रकों रजिस्टर करने के लिए (यह सामान्य builder.RegisterControllers विधि से अलग है):

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
+0

मैं अपने काम के लिए फिर से AutofacDependencyResolver का उपयोग करें। जानकारी के लिए धन्यवाद। क्या कुछ संदर्भ लिंक हैं? क्या माइक्रोसॉफ्ट/ऑटोफैक ने इसे कभी समझाया? ApiControler का उपयोग करें, लेकिन अगर मैं DependecyResolver को AutofacWebApiDependencyResolver में डालना चाहता हूं, तो यह विफल हो जाता है। – user437899

+0

ऐसा लगता है कि अगर मैं निर्भरता रिज़ॉलवर द्वारा प्रदान करता हूं। कुरान, मुझे एमवीसी रिज़ॉल्वर मिलता है। और WebApiResolver semms ApiControllers में पैरामीटर इंजेक्षन के लिए ज़िम्मेदार होना चाहिए। अगर मैं नियंत्रक विधि के भीतर किसी भी प्रकार को हल करना चाहता हूं, तो मुझे एमवीसी रिसोवलर – user437899

+0

@ मैक्स माफ करना होगा। मुझे खेद है कि मैं दोनों बार देर हो चुकी थी और अन्य समुदाय के सदस्यों ने आपके संपादन को खारिज कर दिया क्योंकि काफी हद तक यह एक अच्छा बिंदु जोड़ा लेकिन आपको एक टिप्पणी छोड़नी चाहिए इसके बजाए (मुझे पता है कि आपके पास पर्याप्त प्रतिष्ठा नहीं है लेकिन यह बहुत दूर नहीं है) क्योंकि उत्तर संपादन को संभालने की नीति काफी सख्त है और समीक्षाकर्ताओं ने महसूस किया कि आप मेरा जवाब बहुत अधिक बदलना चाहते हैं। वैसे भी मदद के लिए धन्यवाद जो मैंने आपके सुझाव में संपादित किया है। – nemesv