Как установить значения атрибутов с помощью отражения

У меня есть класс, украшенный атрибутом...[DataEntity("MESSAGE_STAGING", EnableCaching = true, CacheTimeout = 43200)]

по некоторым требованиям я хочу изменить это значение MESSAGE_STAGING во время выполнения Test_Message_Staging,

Каков наилучший способ достичь этого?

Могу ли я использовать рефлексию, или есть ли другой способ сделать это.

Пожалуйста, предоставьте образцы кода.

Спасибо СНС

3 ответа

Я не верю, что можно устанавливать атрибуты с помощью отражения - и даже если это так, я бы посоветовал вам этого не делать.

Атрибуты должны использоваться для метаданных, которые известны во время компиляции. Если вы хотите более динамичную форму метаданных, загрузите их из файла или используйте вместо этого app.config... или, по крайней мере, имейте некоторые специальные значения "заполнителя" (например, |DataDirectory| в строке подключения), которые могут быть разрешены при выполнении время.

Невозможно изменить значение свойства атрибута во время выполнения с помощью отражения, поскольку атрибуты являются метаданными, сериализованными в сборке, и их изменение означает изменение сборки.

Если я вас правильно понимаю, в отражении возможен способ изменить значение атрибута экземпляра во время выполнения. Изучите пример кода.

        AttributeCollection ac  = TypeDescriptor.GetAttributes(yourObj);

        foreach (var att in ac)
        {
            //DataEntityAttribute  -- ur attribute class name
            DataEntityAttribute da = att as DataEntityAttribute ;
            Console.WriteLine(da.field1);  //initially it shows MESSAGE_STAGING
            da.field1= "Test_Message_Staging";  
         }


         //Check the changed value
        AttributeCollection acc = TypeDescriptor.GetAttributes(yourObj);

        foreach (var att in ac)
        {
            DataEntityAttribute da = att as DataEntityAttribute ;
            Console.WriteLine(da.field1); //now it shows Test_Message_Staging
        }
Другие вопросы по тегам