Asp.net mvc 如何将对象传递到VIewModel的构造函数中?ASP.NET MVC 3,Ninject
我一直在使用Bob Cravens博客中描述的存储库模式来创建我的应用程序,但我有点新,仍然在寻找解决方法。我想将DataService对象注入ViewModel的构造函数中,这样我就可以创建一个SelectList对象,并在视图中创建一个下拉框。然而,我似乎无法让绑定正常工作,每次我创建ViewModel时,它都会查找/执行无参数构造函数!我已经尝试了各种方法,在这里使用答案,但都没有用。非常感谢您的帮助 视图模型:Asp.net mvc 如何将对象传递到VIewModel的构造函数中?ASP.NET MVC 3,Ninject,asp.net-mvc,ninject,viewmodel,Asp.net Mvc,Ninject,Viewmodel,我一直在使用Bob Cravens博客中描述的存储库模式来创建我的应用程序,但我有点新,仍然在寻找解决方法。我想将DataService对象注入ViewModel的构造函数中,这样我就可以创建一个SelectList对象,并在视图中创建一个下拉框。然而,我似乎无法让绑定正常工作,每次我创建ViewModel时,它都会查找/执行无参数构造函数!我已经尝试了各种方法,在这里使用答案,但都没有用。非常感谢您的帮助 视图模型: public class ServerCreateViewModel {
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 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);
}
数据服务应该注入控制器,而不是视图模型。谢谢,我最初就是这样做的,但我完全不确定这样做是否正确!我很感激你这么说。
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);
}