Намерение:
Я пишу бизнес-приложение, которое использует несколько перечислений, где большинство этих перечислений также существует в таблицах базы данных. Проблема возникает при обслуживании, когда один из членов команды или поздний разработчик меняет значение члена перечисления в одном из двух мест, оставляя перечисление несинхронизированным. Чтобы решить эту проблему, я пытаюсь создать собственный атрибут перечисления, который генерирует исключение, когда обнаруживает, что значения перечисления не синхронизированы.
Реализация:
[AttributeUsage(AttributeTargets.Enum)]
public class EnumSyncAtrribute : Attribute
{
public EnumSyncAtrribute(Type databaseAccessType, Type enumType))
{
// Code that uses that databaseAccessType to access the database to get
// enum values then compare it to values of enumType , goes here.
}
}
Затем целевое перечисление помечается следующим образом
[EnumSyncAtrribute(typeof(MyDataBaseAccess), typeof(MyEnum))]
public enum MyEnum
{
value1 = 0,
value2 = 1,
value3 = 2
}
Проблема:
Проблема в том, что этот конструктор атрибутов никогда не выполняется! Я попытался заменить Enum классами и обнаружил, что он работает нормально, но с Enums нет!
Вопрос в том, когда для перечислений используются пользовательские атрибуты, когда выполняются их конструкторы?