将mvc 3中的模型从Web项目移动到类库

时间:2011-04-26 11:00:54

标签: asp.net-mvc-3

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

  1. 控制器
  2. 模型
  3. 浏览
  4. 我想实现一个分层的架构,因此我创建了一个具有业务和存储库层的类库项目。

    我将模型从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的引用添加到我的类库中。
    2. 在这两种情况下我都无法解决问题。 resharper提到了与循环依赖关系有关的错误。

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

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

2 个答案:

答案 0 :(得分:0)

您查看模型是UI图层的关注点。因此,不应将它们移到类库中。

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

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

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

答案 1 :(得分:0)

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

此致 肖恩