gpt4 book ai didi

c# - IValidatableObject 和依赖注入(inject)支持

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:36 26 4
gpt4 key购买 nike

在我的 ASP.NET MVC 3 项目中,我在一个单独的类库项目中实现了存储库模式。

我还使用 EF 作为 ORM。我还使用 IValidatableObejct 接口(interface)实现了一些模型验证。这是它的样子:

[MetadataType(typeof(AccommPropertySeasonPeriodAlias.MetaData))]
public partial class AccommPropertySeasonPeriodAlias : IValidatableObject {

private class MetaData {

[StringLength(5), Required]
[Display(Name = "Period Alias Name")]
public string AccommPropertySeasonPeriodAlias1 { get; set; }
}

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

var repo = new AccommPropertySeasonPeriodAliasRepository();

if (repo.GetAll(this.AccommPropertySeasonID).
Where(x => x.AccommPropertySeasonPeriodAlias1 == this.AccommPropertySeasonPeriodAlias1) != null)

yield return new ValidationResult("Alias Name needs to be unique");
}
}

如您所见,从现在开始,我的模型完全紧耦合,因为我直接使用了 AccommPropertySeasonPeriodAliasRepository 类,而不是使用 IAccommPropertySeasonPeriodAliasRepository

正确执行此操作的方法是什么,以便我的模型可以,好吧,(不确定这个词是否正确)fake-able 用于单元测试?

最佳答案

可以使用 MVC 的内置解析器注入(inject)验证逻辑。

查看 ModelValidatorProvider 的用法,它是使用 MVC 中注册的容器解析的。

ASP.NET MVC 3: Validating model when information external to the model is required

关于c# - IValidatableObject 和依赖注入(inject)支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com