IValidatableObject 和依赖注入支持

tug*_*erk 6 c# asp.net asp.net-mvc dependency-injection asp.net-mvc-3

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

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

[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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

正确执行此操作的方法是什么,以便我的模型可以(不确定这是否正确)可以伪造进行单元测试?

Ada*_*SFT 4

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

请参阅 ModelValidatorProvider 的用法,该用法是使用 MVC 中注册的容器解析的。

ASP.NET MVC 3:需要模型外部信息时验证模型