Как установить значения атрибутов с помощью отражения - PullRequest
6 голосов
/ 29 января 2010

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

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

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

Могу ли я использовать отражение или есть другой способ сделать это.

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

Спасибо SNA

Ответы [ 3 ]

8 голосов
/ 29 января 2010

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

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

5 голосов
/ 29 января 2010

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

1 голос
/ 29 января 2010

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

        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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...