我如何传递一个对象到我的VIewModel的构造函数?ASP.. NET MVC 3, Ninject



我一直在使用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);
} 
数据服务应该注入到控制器中,而不是视图模型中。

相关内容

  • 没有找到相关文章

最新更新