2011-10-19 100 views
5

我一直在使用Bob Cravens博客中描述的存儲庫模式來創建我的應用程序,但我有點新,但仍然找到了解決方法。我想將我的DataService對象注入到ViewModel的構造函數中,這樣我就可以創建一個SelectList對象,並在我的視圖中創建一個下拉框。然而,我似乎無法獲得綁定工作,每次創建ViewModel時,它都會查找/執行無參數的構造函數!我已經嘗試了各種使用這裏的答案,但無濟於事。幫助將不勝感激。如何將對象傳遞給我的VIewModel的構造函數? ASP.NET MVC 3,Ninject

視圖模型:

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

DataService應該注入控制器,而不是視圖模型。

+0

謝謝,多數民衆贊成我最初如何,但我完全不確定這是否是正確的方式來做到這一點!欣賞正確的。 – Kiada

+0

請問下臺選民可以解釋一下嗎? –

相關問題