У меня есть специальный ValidationAttribute, он проверяет, существует ли еще один пользователь. Для этого ему нужен доступ к моему уровню доступа к данным, экземпляр, введенный в мой контроллер UnityКак передать параметры в ValidationAttribute?
Как передать это (или что-нибудь в этом отношении) в качестве параметра в свой пользовательский валидатор?
Возможно ли это? т.е. там, где я создаю Даль, который должен быть параметра Я
public class EmailIsUnique : ValidationAttribute
{
private string _errorMessage = "An account with this {0} already exists";
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
DataAccessHelper Dal = new DataAccessHelper(SharedResolver.AppSettingsHelper().DbConnectionString); //todo, this is way too slow
bool isValid = true;
if(value == null) {
isValid = false;
_errorMessage = "{0} Cannot be empty";
} else {
string email = value.ToString();
if (Dal.User.FindByEmail(email) != null)
{
isValid = false;
}
}
if (isValid)
return ValidationResult.Success;
else
return new ValidationResult(String.Format(_errorMessage, validationContext.DisplayName));
}
}
Извините, я думаю, мой код немного запутан. Мне нужно избавиться от шаблона локатора службы здесь, потому что он находится в отдельном проекте, который должен получать только зависимости. Похоже, мне, возможно, придется перенести это из атрибута на какой-то пользовательский код. Спасибо Джеймсу, оцените его! – Baconbeastnz
Если это так, вы можете рассмотреть абстрагирование своего DAL с помощью интерфейса, зарегистрировав этот интерфейс с вашим контейнером IoC и используя инъекцию свойств, указав [Dependency] над свойством IDataAccesHelper в вашем атрибуте? – Jamez
Да! Я только придумал ту же самую стратегию в моей голове, выйдя на улицу (первая часть в любом случае!). Re 2-я часть, которая потрясающе, я не знал об Unity, спасибо! – Baconbeastnz