2011-11-18 9 views
5

नहीं देख रहा है हाय मैं एक एमवीसी ऐप के साथ निंजा का उपयोग कर रहा हूं।DI ninject नियंत्रकों के लिए काम कर रहा है लेकिन मॉडल

मुझे यकीन है कि मैंने इसे सही तरीके से सेटअप किया है क्योंकि मैं इसे अपने नियंत्रकों के लिए काम करने में सक्षम हूं। यहाँ एक नियंत्रक के लिए एक उदाहरण है और इसे सही ढंग से काम कर रहा है:

public class GstRateController : Controller 
    { 
     private readonly IUnitOfWork _unitOfWork; 

     public GstRateController(IUnitOfWork unitOfWork) 
     { 
      _unitOfWork = unitOfWork; 
     } 
... 

फिर मैंने सोचा कि यह भी एक ViewModel पर अच्छा होगा तो मैं करने की कोशिश की है कि के साथ:

public class SettingController : Controller 
    { 
     private readonly IUnitOfWork _unitOfWork; 

     public SettingController(IUnitOfWork unitOfWork) 
     { 
      _unitOfWork = unitOfWork; 
     } 

तो फिर मैं दृश्य instantiated द्वारा एक नियंत्रक में मॉडल:

public ActionResult Index() 
     { 
      return View("Index", Activator.CreateInstance<SettingViewModel>()); 
     } 

लेकिन यह मुझे त्रुटि दे रहा है:

नहीं पी इस वस्तु के लिए परिभाषित arameterless कन्स्ट्रक्टर।

मैं DI के लिए नया हूं। क्या कोई मुझे बता सकता है कि इसे व्यूमोडेल के लिए कैसे प्राप्त किया जाए?

+0

'एक्टिवेटर। क्रिएट इंस्टेंस <सेटिंगिंग व्यू मॉडेल>()' प्रतिबिंब है, न कि निंजा। निनजेक्ट घटकों को स्पष्ट रूप से हल करने के लिए 'kernel.Get ()' का उपयोग करता है। लेकिन आपको आमतौर पर कर्नेल का उपयोग अपने ऐप के बीच में नहीं करना चाहिए। इसके बजाय डारिन का जवाब देखें। –

उत्तर

4

यह नियंत्रकों के लिए काम करता है और मॉडलों को देखने का कारण यह नहीं है क्योंकि जब आप NInject NuGet इंस्टॉल करते हैं तो यह एक कस्टम निर्भरता रिज़ॉल्वर पंजीकृत करता है और एएसपी.नेट एमवीसी ढांचा नियंत्रक को तुरंत चालू करने के लिए नियंत्रक फैक्ट्री या निर्भरता रिज़ॉल्यूवर का उपयोग करता है। आप this article में निर्भरता रिज़ॉलर्स के बारे में अधिक पढ़ सकते हैं।

दूसरी ओर मॉडल देखें कक्षाएं जिन्हें आपने विशेष रूप से किसी दिए गए दृश्य की आवश्यकताओं को पूरा करने के लिए डिज़ाइन किया है। चूंकि आप उन्हें मैन्युअल रूप से तत्काल कर रहे हैं, इसलिए एक डी फ्रेमवर्क कभी भी इसमें किसी भी निर्भरता को अवरुद्ध और इंजेक्ट नहीं कर सकता है। उन्हें निर्भरता नहीं होनी चाहिए। वे साधारण पॉको ऑब्जेक्ट्स होना चाहिए जो डोमेन मॉडल से मैप किए जाते हैं। वे या अधिक डोमेन मॉडल की एक परियोजना का प्रतिनिधित्व करते हैं।

+1

तो "मोटी मोडल, पतली नियंत्रक" कैसे प्राप्त करें? जहां तक ​​मुझे कुछ भी पता है जो डेटा या डेटा हेरफेर से संबंधित है, एक मॉडल में होना चाहिए। हमें डेटा मैनिपुलेटर ऑब्जेक्ट और/या संदर्भ (यानी इकाई संदर्भ) ऑब्जेक्ट्स को कैसे पास करना चाहिए? – Seregwethrin

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