如何覆盖 ASP.NET MVC 3 默认模型绑定器以在模型创建期间解决依赖关系(使用 ninject)?
我有一个 ASP.NET MVC 3 应用程序,它使用 Ninject 来解决依赖关系。到目前为止,我所要做的就是使全局文件继承自 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 并解析依赖项?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
让视图模型依赖于存储库是一种反模式。不要这样做。
如果您仍然坚持,这里是模型绑定器的示例。我们的想法是拥有一个自定义模型绑定器,您可以在其中重写 CreateModel 方法:
您可以为需要进行此注入的任何视图模型注册该方法:
Having view models depend on a repository is an anti-pattern. Don't do this.
If you still insist, here's an example of how a model binder might look like. The idea is to have a custom model binder where you override the
CreateModel
method:which you could register for any view model you need to have this injection: