2011-02-16 14 views
10

यह बेवकूफ सवाल हो सकता है, लेकिन मैं निनजेक्ट स्रोतों को देख रहा हूं और एन इंजेक्ट को अपने स्वयं के नियंत्रक कारखाने को पंजीकृत नहीं देख रहा हूं। मुझे Ninject.Web.Mvc असेंबली में IControllerFactory कक्षा भी दिखाई नहीं दे रही है। क्या मैं कुछ भूल रहा हूँ? निनजेक्टर कंट्रोलर कैसे बनाता है और कन्स्ट्रक्टर में पैरामीटर इंजेक्ट करता है?निनजेक्ट एएसपी.नेट एमवीसी में नियंत्रक कैसे बनाता है?

+0

ऐसा लगता है कि मेरा एप्लिकेशन उसी तर्क का पालन कर रहा है। ऐसा लगता है कि यह नियंत्रक को पंजीकृत नहीं कर रहा है। –

उत्तर

11
  1. आइए कहें कि हम "/ कार्य/सूचकांक" की तलाश में हैं।
  2. निनजेक एमवीसी अनुप्रयोग अब DefaultControllerFactory का उपयोग करते हैं, जो गैर-निंजा अनुप्रयोगों के समान हैं।
  3. DefaultControllerFactory नियंत्रक के लिए प्रकार पाता है (TaskController)।
  4. DefaultControllerFactory में आंतरिक कक्षा DefaultControllerActivator है। DefaultControllerActivator में Create नामक विधि है, जो नियंत्रक उदाहरण देता है। DefaultControllerFactoryDefaultControllerActivatorTaskController प्रकार उदाहरण के लिए पूछता है।
  5. DefaultControllerActivator.CreateIDependencyResolver का उपयोग करता है। यह वह जगह है जहां Ninject आता है। चूंकि Ninject अपने स्वयं के रिज़ॉल्यूवर को लागू करता है और इसे एप्लिकेशन की शुरुआत में सेट करता है, तो उसे TaskController इंस्टेंस के लिए अनुरोध मिलता है।
  6. शेष आसान है। Ninject इस प्रकार के लिए कन्स्ट्रक्टर पाता है, पैरामीटर इंजेक्ट करता है, कंट्रोलर इंस्टेंस देता है।
4

एमवीसी 3 अब DI से निपटने के दौरान अच्छे पुराने IControllerFactory के बजाय IDependencyResolver इंटरफ़ेस के उपयोग की अनुशंसा करता है। आप इस इंटरफ़ेस here के अधिक विवरण देख सकते हैं।

This is the new Ninject class निर्भरताओं को इंजेक्शन देने के लिए ज़िम्मेदार है।

0

के बाद से नियंत्रकों ठोस प्रकार के होते हैं, Ninject स्वयं बाँध करेंगे। नीचे ninject.complex.com

ध्यान रखें कि केवल ठोस प्रकार स्वयं-बाध्य हो सकते हैं; अमूर्त प्रकार और इंटरफेस काम नहीं करेंगे। साथ ही, यदि आप प्रकार के उदाहरण का अनुरोध करते हैं जो स्वयं-बाध्य हो सकता है, और प्रकार के लिए परिभाषित कोई बाइंडिंग नहीं है, तो निनजेक्ट स्वचालित रूप से एक अंतर्निहित स्वयं-बाध्यकारी बना देगा। यह आपके ऊपर है कि आप अपनी बाइंडिंग को स्पष्ट रूप से परिभाषित करना चाहते हैं, या निनजेक्ट को समझें।

यदि आपको कन्स्ट्रक्टर में पैरामीटर इंजेक्ट करने की आवश्यकता है। आप INinjectModule से कक्षा विरासत बना सकते हैं और वहां बाध्यकारी कर सकते हैं।

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