将依赖项注入自定义ModelBinder

时间:2009-02-23 22:10:55

标签: asp.net-mvc binding inversion-of-control

我目前正在开发一个ASP.net MVC项目,我想知道以下是否可行: 我有一个自定义的ModelBinder类,它引用了一个服务(本质上是一个fetcher)作为依赖项。我希望使用IoC容器(当前为Ninject)注入依赖项,但是在方法链中似乎没有任何地方可以插入一些内容,即从我的IoC容器中加载模型绑定器。

我的第一个想法是拥有一个通用对象绑定器,然后尝试从容器中检索特定的ModelBinder,如果没有找到则返回null,然后将其作为绑定器,例如:     ModelBinders.Binders.Add(typeof运算(对象)的typeof(NinjectModelBinder));

但我不确定

  • a)如果这样可行
  • b)如果它真的是正确的事情

我可以放弃复杂对象的解析直到Action方法,但是能够提供复杂对象(基本上是从数据访问层加载和构建)作为参数来更清晰,更可取。行动。

任何想法/帮助表示感谢。

3 个答案:

答案 0 :(得分:4)

我认为您将不得不在模型绑定器中进行服务定位器调用,或者建立模型绑定器,或者两者兼而有之。

    ModelBinders.Binders.Add(typeof(Customer), Resolve<CustomerBinder>());

答案 1 :(得分:1)

我个人在我的场景中使用setter注入类似于你的。在查找之后,NInject调用此属性注入。它起作用并完成工作。

答案 2 :(得分:1)

在模型绑定器中,你可以调用类似的东西

IMyFetcher db = DependencyResolver.Current.GetService<IMyFetcher>();