Я хочу проверить условие определения класса в процессе сборки и показать ошибку сборки в случае, если что-то не проверено.
В процессе сборки атрибут атрибута создается для каждого класса, определенного этим атрибутом. Я хочу проверить что-то вроде, например, что класс не имеет более 4 свойств (например, это не мое намерение). Как я могу получить тип из конструктора атрибутов для каждого класса? (Без передачи в качестве параметра).
Пример:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class ValidatePropertiesAttribute:ValidationAttribute
{
public ValidatePropertiesAttribute()
{
if(Validate()==false)
{
throw new Exception("It not valid!! add more properties to the type 'x'.");
}
}
public bool Validate()
{
//check if there are at least 4 properties in class "X"
//Q: How can I get class "X"?
}
}
[ValidateProperties()]
public class ExampleClass
{
public string OnOneProperty { get; set; }
}
Возможно ли это?
Если нет, есть ли другой способ сделать это? (добавьте валидацию в процесс сборки и покажите ошибки в случае, если что-то не было проверено)
Это решение может работать
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class ValidatePropertiesAttribute:ValidationAttribute
{
private Type TargetClass;
public ValidatePropertiesAttribute(Type targetClass)
{
TargetClass = targetClass;
if(Validate() == false)
{
throw new Exception("It not valid!! add more properties to the type 'x'.");
}
}
public bool Validate()
{
//Use Target Class,
//if you need extract properties use TargetClass.GetProperties()...
//if you need create instance use Activator..
}
}
Используйте этот атрибут следующим образом
[ValidateProperties(typeof(ExampleClass))]
public class ExampleClass
{
public string OnOneProperty { get; set; }
}