【问题标题】:Moving the models in mvc 3 from web project to class library将 mvc 3 中的模型从 web 项目移动到类库
【发布时间】:2011-04-26 11:00:54
【问题描述】:

我正在 MVC3 中创建一个应用程序。在创建应用程序时,Web 项目中创建了三个文件夹:

  1. 控制器
  2. 型号
  3. 观看次数

我想实现一个分层架构,因此我创建了一个类库项目,其中包含业务层和存储库层。

我将模型从 web 项目移动到类库项目,以便我可以在业务层中使用模型。 模型类包含所需的属性及其验证,如下所示:

public class ChangePasswordModel
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }

    [Required]
    [ValidatePasswordLength]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

public sealed class ValidatePasswordLengthAttribute : ValidationAttribute, IClientValidatable

我在上面的同一个文件中还有一个类来验证我的密码长度,它实现了接口IClientValidatable

我面临两个问题:

  1. 我无法使用 CompareAttribute 以及接口 IClientValidatable。提到的两个类都与 System.Web.MVC 不同。我已将System.Web.MVC dll 的引用添加到我的类库中。

在这两种情况下,我都无法解决问题。 resharper 提到了与循环依赖相关的错误。

我可以不使用System.Web.Mvc 引用并使用类库中提供的类和验证吗? 此外,System.ComponentModel.DataAnnotations 中提供的验证不会产生问题。

我无法构建解决方案,因此无法继续开发。 欢迎任何解决方案和建议。

【问题讨论】:

  • 如果您需要帮助,您应该花更多时间格式化您的问题。这次我做到了。

标签: asp.net-mvc-3


【解决方案1】:

您的视图模型是 UI 层的关注点。因此,不应将它们移至类库。

不要将视图模型与业务层中的模型混淆。视图模型用于表示视图中的业务模型。使用 AutoMapper 之类的映射层将信息从您的业务模型复制到您的视图模型。

关于视图模型的更多信息:http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/

除此之外,循环依赖与 ASP.NET 或 MVC 没有任何关系。您很可能尝试将项目 A 的引用添加到项目 B,反之亦然。不可能。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我不确定这是否适合您或将继续开发,但修复非常简单,在您的库中添加对 EntityFramework 的引用,它将消除错误。

    问候, 肖恩

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多