Поддержка IValidatableObject и Dependency Injection - PullRequest
1 голос
/ 10 ноября 2011

В моем проекте 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");
    }
}

Как видите, с этого момента моя модель полностью тесно связана, потому что я использовал AccommPropertySeasonPeriodAliasRepository класс напрямую вместо IAccommPropertySeasonPeriodAliasRepository.

Как это сделать правильно, чтобы моя модель могла, ну, (не уверен, что это правильное слово) подделка для модульного тестирования?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Логика проверки может быть введена с помощью встроенного распознавателя MVC.

См. Использование с ModelValidatorProvider, которое разрешается с использованием зарегистрированного контейнера в MVC.

ASP.NET MVC 3: проверка модели, когда требуется информация, внешняя для модели

3 голосов
/ 10 ноября 2011

Ограничение уникальности выходит за рамки этой сущности.Вы должны проверить это ограничение при добавлении новой сущности извне.Эта проверка не должна принадлежать самой сущности.Это зависит от контекста, в котором находится объект, а не только от этого объекта.

...