【问题标题】:Injecting a dependency into a custom ModelBinder将依赖项注入自定义 ModelBinder
【发布时间】:2009-02-23 22:10:54
【问题描述】:

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

我的第一个想法是拥有一个通用对象绑定器,然后尝试从容器中检索特定的 ModelBinder,如果找不到则返回 null,然后将其设置为绑定器,即类似于: ModelBinders.Binders.Add(typeof(object),typeof(NinjectModelBinder));

但我不确定

  • a) 是否可行
  • b) 如果这确实是正确的做法

我可以在 Action 方法之前放弃对复杂对象的解析,但是能够将复杂对象(本质上是从数据访问层加载和构建)作为参数提供给行动。

任何想法/帮助表示赞赏。

【问题讨论】:

  • 我个人认为通过 ModelBinderAttribute 创建的 ModelBinders 也应该是可注入的。我认为这是当前 MVC 版本的设计缺陷。

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


【解决方案1】:

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

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

【讨论】:

  • 是的,我认为可能是这样。
【解决方案2】:

我个人在与您类似的场景中使用 setter 注入。查了一下,NInject 调用了这个属性注入。它可以工作并完成工作。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2010-11-05
      • 2015-06-25
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      相关资源
      最近更新 更多