我正在MVC3中创建一个应用程序。在创建应用程序时,Web项目中创建了三个文件夹:
我想实现一个分层的架构,因此我创建了一个具有业务和存储库层的类库项目。
我将模型从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
我面临两个问题:
IClientValidatable
。这两个提到的类都区别于System.Web.MVC。我已将System.Web.MVC
dll的引用添加到我的类库中。在这两种情况下我都无法解决问题。 resharper提到了与循环依赖关系有关的错误。
我可以不使用System.Web.Mvc
引用并使用类库中提供的类和验证吗?
此外,System.ComponentModel.DataAnnotations
中提供的验证不会产生问题。
我无法构建解决方案,因此无法继续开发。 欢迎任何解决方案和建议。
答案 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的引用,它将带走错误。
此致 肖恩