ASPNET CORE Validação com Injeção de Dependência.

Fulvio Cezar Canducci Dias
2 min readMar 30, 2021

Com o tutorial ASPNET Core Validação Customizadas Server Side e Client Side explica basicamente formas na criação de validações próprias e o foco é blindar a sua aplicação e melhorar os processos de validação de modelos.

Nesse tutorial adicional é demonstrado o uso da parte da injeção de dependência (recurso nativo nas aplicações .NET CORE) dentro de um classe de validação, muito útil para acesso a diversos recursos disponibilizados pela aplicação como por exemplo, acesso a base de dados e informações de alguma camada proposta ou existente na aplicação.

O exemplo que é proposto é o seguinte, tem um classe com o nome de People que possui o seguinte layout:

public class People
{
[Required]
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
[Unique]
public string NickName { get; set; }
}

sendo que no NickName tem um atributo de validação com o nome de Unique. O corpo de código desse atributo segue:

public class UniqueAttribute : ValidationAttribute
{
public UniqueAttribute() { } protected override ValidationResult IsValid
(
object value,
ValidationContext validationContext
)
{
DatabaseService service = validationContext
.GetService(typeof(DatabaseService)) as DatabaseService;

People people = service
.People
.AsNoTracking()
.FirstOrDefault(x => x.NickName == value.ToString());
People request = validationContext.ObjectInstance as People; if (people != null)
{
if (people.Id == request.Id)
{
return ValidationResult.Success;
}
return new ValidationResult("Nick Name already existing");
}
return ValidationResult.Success;
}
}

e nesse código resgato a classe do Entity Framework (ORM)para busca na tabela referente validando se o campo NickName não existe para cadastros novos ou na alteração confere se o NickName é da mesma pessoa ou diferente.

Esse exemplo é a forma de buscar as instâncias que estão previamente configuradas como injeção de dependência na aplicação sendo que o código que está no corpo dessa classe UniqueAttribute utilizando validationContext.GetService passando o tipo (typeof) para a busca do objeto que tem acesso a base de dados, exemplo:

DatabaseService service = validationContext
.GetService(typeof(DatabaseService)) as DatabaseService;

O exemplo completo no meu Github acessa aqui.

Referencia

--

--

Fulvio Cezar Canducci Dias

Bacharel em Sistemas de Informação, MTAC (Multi-Plataform Technical Audience Contributor-Microsoft), BackEnd C# e PHP e Developer Web