Как мне создать собственный Валидатор модели, используя атрибуты - PullRequest
0 голосов
/ 04 мая 2019

Со ссылкой на Проверка модели я считаю, что гораздо проще проверять модели с помощью атрибутов. Я хочу иметь возможность проверять модели / объекты классов в других шаблонах проектов, таких как консольные приложения, функциональные приложения, приложения Xamarin и настольные приложения, которые не имеют обширной поддержки MVC и по умолчанию не имеют System.ComponentModel.DataAnnotations. Класс ValidationAttribute.

Ниже представлен мой класс модели:

public class User
{
    [Unique]//Ensures that the ID is unique
    [AlphaNumeric]//Ensures that the ID is alphanumeric
    public string ID { get; set; }

    //Custom attribute to determine of the name is valid by concatenating the FirstName and LastName
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [CompanyEmail]//Custom attribute to ensure that validates that the email belongs to the company
    public string Email { get; set; }

    [CountryPhoneNumber]//Custom attribute to ensure that the phone number belongs to a specific country
    public string PhoneNumber { get; set; }

    [Age]//Custom attribute to ensure that from the Date of birth, only the users above a certain age can be registered
    public DateTime DateOfBirth { get; set; }
}

Мне нужна помощь с реализацией всех атрибутов, так как они настраиваются для достижения возможности иметь такую ​​функцию, как показано ниже

public static class Validator
{
    public static (bool IsValid, List<string> errors) ValidateModel<T>(T obj)
    {
        //Implementation of the validator that validates the model of Type T in this case User
    }
}

Который я могу вызвать в формате ниже, чтобы получить ответ, который я смогу использовать позже, как показано ниже:

public class Program
{
    static void Main(string[] args)
    {
        var response = Validator.ValidateModel<User>(new User
        {
            DateOfBirth = DateTime.UtcNow.AddYears(-10),
            Email = "randomemail@gmail.com",
            FirstName = null,
            LastName = "",
            ID = "!2sunjsd)9(",
            PhoneNumber = "27778596829"
        });
    }
}

Буду признателен за любые идеи и советы по этому вопросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...