2011-10-19 25 views
5

Tôi đã sử dụng mẫu kho lưu trữ được mô tả trong blog của Bob Cravens để tạo ứng dụng của tôi, nhưng tôi mới có một chút mới và vẫn đang tìm đường đi xung quanh nó. Tôi muốn tiêm đối tượng DataService của tôi vào hàm tạo của ViewModel của tôi để tôi có thể tạo một đối tượng SelectList và tạo một hộp thả xuống trong khung nhìn của tôi. Tuy nhiên tôi không thể có vẻ để có được các bindings để làm việc, mỗi khi tôi tạo ViewModel nó tìm/thực hiện các constructor parameterless! Tôi đã thử nhiều cách khác nhau bằng cách sử dụng câu trả lời ở đây trên SO nhưng vô ích. Trợ giúp sẽ được đánh giá cao.Làm thế nào để truyền một đối tượng vào hàm tạo của VIewModel của tôi? ASP.NET MVC 3, Ninject

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 mô-đun:

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

Bộ điều khiển:

public ActionResult Create(ServerCreateViewModel viewModel) 
    { 

     return View(viewModel); 
    } 

Trả lời

12

Bạn không nên làm điều đó!

Xem mô hình (tất cả các mô hình, trên thực tế) sẽ chỉ là các nhóm có một số dữ liệu. Chúng không nên phụ thuộc vào bất kỳ logic, dịch vụ kinh doanh nào, v.v.

Trách nhiệm của bộ điều khiển là đưa các mô hình và chuyển chúng sang chế độ xem.

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 sẽ được đưa vào bộ điều khiển chứ không phải xem mô hình.

+0

Cảm ơn, đó là cách tôi đã có nó ban đầu nhưng tôi đã hoàn toàn không chắc chắn nếu đó là cách chính xác để làm điều đó! Đánh giá cao được đặt ngay trên đó. – Kiada

+0

Có thể giải thích cho cử tri xuống không? –

Các vấn đề liên quan