Cómo establecer valores de atributos usando la reflexión

Tengo una clase decorada con un atributo … [DataEntity("MESSAGE_STAGING", EnableCaching = true, CacheTimeout = 43200)]

para algún requisito, quiero cambiar este valor MESSAGE_STAGING en tiempo de ejecución a Test_Message_Staging .

¿Cuál es la mejor manera de lograr esto?

¿Puedo usar la reflexión, o hay alguna otra forma de hacerlo?

Proporcione ejemplos de código.

Gracias SNA

No creo que sea posible establecer atributos usando la reflexión, e incluso si lo es, te animo a que no lo hagas.

Los atributos se deben usar para los metadatos que se conocen en tiempo de comstackción. Si desea una forma más dinámica de metadatos, cárguelo de un archivo o use app.config en su lugar … o al menos tenga algunos valores especiales de “marcador de posición” (como | DataDirectory | en una cadena de conexión) que se pueden resolver en la ejecución hora.

No es posible cambiar el valor de propiedad de atributo en tiempo de ejecución con reflexión porque los atributos son meta-datos serializados en el ensamblado y cambiarlos significa cambiar el ensamblaje.

Si te entiendo correctamente, hay una forma posible de reflexión para cambiar el valor del atributo de una instancia en tiempo de ejecución … verifica el código de muestra

  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 }