<< Click to Display Table of Contents >> Validador.cs |
![]() ![]() ![]() |
using System.Reflection;
using Modelo.classes;
namespace Persistencia.classes
{
public static class Validador
{
/// <summary>
/// A classe Validator é usada para descobrir se alguma propriedade obrigatória não foi preenchido
/// </summary>
/// <param name="t">instância da classe, exemplo: pessoa</param>
/// <param name="mensagem">parametro de saída - mensagem para ser exibida em caso de campo obrigatório não preenchido</param>
/// <returns>retorna true se todos os campos required estão preenchidos</returns>
public static bool IsValid<T>(T t, out string mensagem, out string nome)
{
// reflection que pega os membros de um tipo
MemberInfo[] members = t.GetType().GetMembers();
// aqui pegamos as propriedades o objeto "T" onde vamos encontrar o valor do objeto
// pega as propriedades e os valores do objeto
var properties = t.GetType().GetProperties();
// pra cada membro...
foreach (MemberInfo member in members)
{
// pega os atributos custom (que eu criei) dos membros e joga num object[]
object[] attributes = member.GetCustomAttributes(true);
// se o membro for diferente tipo Property (pode ser Method, Public,) pula
if (member.MemberType != MemberTypes.Property)
continue;
// não tem atributos? então pula
if (attributes.Length == 0)
continue;
// percorre os atributos customizados (neste exemplo só tem 1: CampoAttribute)
foreach (object attribute in attributes)
{
// se o atributo for CampoAttribute...
if (!(attribute is CampoAttribute))
continue;
CampoAttribute atributo = (CampoAttribute)attribute;
// não é obrigatório? pula...
if (!atributo.Required)
continue;
// percorre as propriedades do objeto e procura uma propriedade com mesmo nome do member.Nome
// achou? então já temos o valor
foreach (PropertyInfo property in properties)
{
// encontrou com mesmo nome?
if (!member.Name.ToString().Equals(property.Name))
continue;
if (property.GetValue(t, null) == null)
{
mensagem = "O preenchimento de " + (string.IsNullOrEmpty(atributo.Descricao) ? atributo.FieldName : atributo.Descricao) + " é obrigatório";
nome = property.Name;
return false;
}
break;
}
}
}
mensagem = string.Empty;
nome = string.Empty;
return true;
}
}
}