Aggiungi l’attributo TypeConverter a enum in runtime

In un’applicazione C # / WPF ho aggiunto un attributo TypeConverter ad alcune delle mie enumerazioni per visualizzare un testo localizzato invece del testo dell’enum:

[TypeConverter(typeof(LocalizedEnumTypeConverter))] public enum MyEnum { EnumVal1 = 0, EnumVal2 = 1, EnumVal3 = 2, } 

Ho implementato LocalizedEnumTypeConverter per eseguire questa attività.

Il problema sorge quando provo ad usare lo stesso approccio con un enum definito in un altro assembly, che non ha accesso a LocalizedEnumTypeConverter, ed è condiviso con altre applicazioni (cioè, non posso aggiungere un riferimento all’assembly dove LocalizedEnumTypeConverter è definito).

C’è un modo per aggiungere l’attributo TypeConverter in runtime? In questo modo posso lasciare l’enum nell’altro assembly senza l’attributo TypeConverter e quindi aggiungerlo in runtime nella mia applicazione.

Questo può essere fatto usando la class TypeDescriptor https://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.aspx . Fare riferimento al seguente esempio.

  Attribute[] newAttributes = new Attribute[1]; newAttributes[0] = new TypeConverterAttribute(typeof(LocalizedEnumTypeConverter)); TypeDescriptor.AddAttributes(MyEnum, newAttributes);