如何在模型创建过程中重写ASP.NET MVC 3默认模型绑定器以解析依赖关系(使用ninject)
本文关键字:模型 依赖 ninject 使用 绑定 关系 默认 过程中 创建 重写 ASP | 更新日期: 2023-09-27 18:00:22
我有一个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并解析依赖项?
让视图模型依赖于存储库是一种反模式。不要这样做。
如果你仍然坚持,这里有一个模型活页夹的样子的例子。这个想法是有一个自定义的模型绑定器,您可以在其中覆盖CreateModel
方法:
public class CustomViewModelBinder : DefaultModelBinder
{
private readonly IKernel _kernel;
public CustomViewModelBinder(IKernel kernel)
{
_kernel = kernel;
}
protected override object CreateModel(ControllerContext controllerContext,
ModelBindingContext bindingContext, Type modelType)
{
return _kernel.Get(modelType);
}
}
您可以为任何需要进行此注入的视图模型注册:
ModelBinders.Binders.Add(typeof(CustomViewModel),
new CustomViewModelBinder(kernel));