数据服务应该注入到控制器中,而不是视图模型中。
我一直在使用Bob Cravens博客中描述的存储库模式来创建我的应用程序,但我是一个新手,仍然在摸索它的方法。我想把我的DataService对象注入到我的ViewModel的构造函数中,这样我就可以创建一个SelectList对象,并在我的视图中创建一个下拉框。然而,我似乎不能得到绑定工作,每次我创建ViewModel它寻找/执行无参数构造函数!我已经尝试了各种方法来使用SO的答案,但无济于事。非常感谢你的帮助。
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);
}
你不应该这么做!
视图模型(实际上是所有模型)应该只是包含一些数据的桶。它们不应该依赖于任何业务逻辑、服务等。
填充模型并将其传递给视图是控制器的责任。
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);
}