【发布时间】:2011-09-23 05:31:46
【问题描述】:
我有一个使用 Ninject 解决依赖关系的 ASP.NET MVC 3 应用程序。到目前为止,我所要做的就是让全局文件从NinjectHttpApplication 继承,然后覆盖CreateKernel 方法来映射我的依赖绑定。之后,我能够在我的 MVC 控制器构造函数中包含接口依赖项,并且 ninject 能够解决它们。这一切都很棒。现在我想在创建模型实例时解决模型绑定器中的依赖关系,但我不知道该怎么做。
我有一个视图模型:
public class CustomViewModel
{
public CustomViewModel(IMyRepository myRepository)
{
this.MyRepository = myRepository;
}
public IMyRepository MyRepository { get; set; }
public string SomeOtherProperty { get; set; }
}
然后我有一个接受视图模型对象的操作方法:
[HttpPost]
public ActionResult MyAction(CustomViewModel customViewModel)
{
// Would like to have dependency resolved view model object here.
}
如何覆盖默认模型绑定器以包含 ninject 和解析依赖项?
【问题讨论】:
-
我不知道你的问题的答案,但我认为你的视图模型不应该有依赖关系。这看起来像活动记录模式,听起来很干净,但实际上很难维护。你的控制器可以有依赖关系,比如服务或其他东西。您的控制器将调用 customViewModel.Save() 或 this.myServiceDep.Save(customViewModel)。后者会更好。
-
您可能是正确的,但我仍然对答案感兴趣。我想知道如何覆盖默认模型绑定器来执行这样的任务,即使我没有在生产中使用它。
标签: c# asp.net-mvc asp.net-mvc-3 dependency-injection model-binding