У нас есть довольно много методов проверки, которым необходимо получить доступ к репозиториям/базе данных для выполнения своей работы. До сих пор мы использовали шаблон локатора службы (хотя и экономно), чтобы выполнить это в пользовательских ValidationAttributes:
public override bool IsValid(object value)
{
// use custom service locator in our app infrastructure
var repos = DependencyInjector.Current.GetService<IXyzRepository>();
...
}
Я знаю, что это:( как анти-шаблон, и мы хотели бы использовать более правильный подход. Мы используем единство, и я читаю этот пост, который говорит, что нужно использовать метод наращивания. Однако ссылка в принятом ответе говорит, что документация устарела (отставной контент).
В решении нет необходимости использовать атрибут проверки, я полагаю, что он мог бы использовать документ IValidatableObject, однако проблема остается: как ввести зависимость в модель. Нужно ли нам для этого использовать специализированное связующее?
Другим решением было бы выполнить проверку в контроллере, где инъекция зависимостей проста. Для меня это чувствует себя загроможденным. Я бы хотел, чтобы модель была подтверждена к моменту ее получения.
Также мы иногда используем [RemoteAttribute] для выполнения некоторых из этих проверок на клиенте. В настоящее время эти методы создают модель представления и делегируют валидацию модели, используя статический метод Validator.TryValidateObject.
Как вы выполнили проверку, которая требует, чтобы вложенная зависимость выполняла свою работу без использования анти-шаблона SL?