【问题标题】:ASP.NET MVC to call my Dependency Resolver when creating an instance?ASP.NET MVC 在创建实例时调用我的依赖解析器?
【发布时间】:2011-02-13 16:02:34
【问题描述】:

我对 ASP.NET MVC 很陌生,所以我希望我的问题有意义。我使用 POCO 对象作为我的模型。据我了解,当提交表单时,MVC 可以创建我的业务对象的新实例并自动填充表单中的属性。

我使用依赖注入,因此我使用如下代码创建新实例:

DependencyResolver.Current.CreateInstance(Of IBusObject)

如何让 ASP.NET MVC 调用此方法,而不是尝试通过在具体类上使用“new”关键字来创建新实例?

【问题讨论】:

  • 顺便说一句,您可能想看看使用轻量级视图模型来发送到您的视图并接收回信息。这使得绑定更清晰,并允许您应用 UI 关注的验证属性。这些视图模型不应涉及任何 DI,因此您无需创建自定义模型绑定器。您可以使用 AutoMapper 从 POCO 类映射到视图模型
  • @Rob 我刚刚更改了我的业务对象以实现 IDataErrorInfo 以传递验证错误。如果我使用视图模型,你知道我是否需要将 IDataErrorInfo 实现移动到视图模型?
  • 如果您采用视图模型方法,那么我认为这是放置验证的自然位置。 MVC 框架将使用它来驱动模型绑定器中的绑定行为。

标签: asp.net-mvc dependency-injection inversion-of-control


【解决方案1】:

查看 MVC 源代码,它在创建模型类型的实例时不会使用依赖解析,因此您无法开箱即用,但您可以通过创建自己的方式轻松实现您想要的支持 DependencyResolver 的模型绑定器。

【讨论】:

  • 我应该在哪里保存自定义模型绑定器?
  • 模型绑定是一个 UI 问题,所以我将我的存储在 Web 应用程序项目中。我在项目中为模型绑定器创建了一个特定文件夹。
【解决方案2】:

您可以编写一个从默认模型绑定器派生的自定义模型绑定器,并覆盖 CreateModel 方法以提供您的自定义实例。

【讨论】:

  • 我应该在哪里保存自定义模型绑定器?
  • @adam0101,保存自定义模型绑定器是什么意思?它是一个通常在 Web 层中定义的类。
  • 我的意思是文件应该放在哪里。它会进入 MVC 创建的 Models 文件夹吗?还是没关系?
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多