2011-10-19 11 views
5

मैं अपना आवेदन बनाने के लिए बॉब क्रेवेन्स ब्लॉग में वर्णित रिपोजिटरी पैटर्न का उपयोग कर रहा हूं, लेकिन मैं थोड़ा नया हूं और अभी भी इसके आसपास अपना रास्ता खोज रहा हूं। मैं अपने DataService ऑब्जेक्ट को अपने व्यूमोडेल के निर्माता में इंजेक्ट करना चाहता हूं ताकि मैं एक सिलेक्टलिस्ट ऑब्जेक्ट बना सकूं और मेरे दृश्य में एक ड्रॉप डाउन बॉक्स बना सकूं। हालांकि, मुझे लगता है कि जब भी मैं ViewModel बनाता हूं, तो यह पैरामीटर रहित कन्स्ट्रक्टर को ढूंढता/निष्पादित करता है! मैंने SO पर उत्तर का उपयोग करके विभिन्न तरीकों का प्रयास किया है लेकिन इसका कोई फायदा नहीं हुआ है। मदद की बहुत सराहना की जाएगी।मैं अपने VIewModel के निर्माता में ऑब्जेक्ट कैसे पास करूं? एएसपी.नेट एमवीसी 3, निनजे

ViewModel:

public class ServerCreateViewModel 
{ 
    public SelectList Companies { get; private set; } 

    public ServerCreateViewModel() 
    { 

    } 

    public ServerCreateViewModel(DataService _dataService) 
    { 

     Companies = new SelectList(_dataService.Companies.All(), "Id", "CompanyName"); 

    } 

Ninject मॉड्यूल:

 Bind<DataService>().ToSelf() 
      .InRequestScope(); 

     var _dataService = Kernel.Get<DataService>(); 

     Bind<ServerCreateViewModel>() 
      .ToSelf() 
      .WithConstructorArgument("_dataService", _dataService); 

     //Bind<ServerCreateViewModel>() 
     // .ToSelf() 
     // .WithConstructorArgument("_dataService", ctx => ctx.Kernel.Get<DataService>()); 

नियंत्रक:

public ActionResult Create(ServerCreateViewModel viewModel) 
    { 

     return View(viewModel); 
    } 

उत्तर

12

आपको लगता है कि कर नहीं किया जाना चाहिए!

मॉडल देखें (वास्तव में सभी मॉडल) कुछ डेटा के साथ बाल्टी होना चाहिए। उन्हें किसी भी व्यावसायिक तर्क, सेवाओं, आदि पर निर्भर नहीं होना चाहिए

यह नियंत्रकों की जिम्मेदारी है कि वे मॉडलों को पॉप्युलेट करें और उन्हें विचारों पर पास करें।

public class ServerCreateViewModel 
{ 
    public SelectList Companies { get; private set; } 
} 

public ActionResult Create() 
{ 
    var viewModel = new ServerCreateViewModel 
    { 
     Companies = new SelectList(_dataService.Companies.All(), "Id", "CompanyName") 
    }; 

    return View(viewModel); 
} 

डेटा सेवा को नियंत्रक में इंजेक्शन दिया जाना चाहिए, मॉडल को नहीं देखना चाहिए।

+0

धन्यवाद, यह है कि मैंने शुरुआत में यह कैसे किया था लेकिन अगर मैं इसे करने का सही तरीका था तो मैं पूरी तरह से अनिश्चित था! उस पर सही लगाए जाने की सराहना करें। – Kiada

+0

क्या डाउन-मतदाता समझा सकता है, कृपया? –

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