2015-04-16 14 views
6

In un C#/applicazione WPF ho aggiunto un attributo TypeConverter ad alcuni dei miei enumerazioni, al fine di visualizzare un testo localizzato invece del testo della enum:Aggiungi attributo TypeConverter al enum in runtime

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

ho implementato LocalizedEnumTypeConverter per eseguire questa attività.

Il problema si presenta quando provo ad utilizzare 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 al assembly in cui 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.

+0

Poiché sono in gruppi diversi e non condividono una base di codice comune, perché non implementare LocalizedEnumTypeConverter anche nell'altro assembly? – CarbineCoder

+1

Il punto è che LocalizedEnumTypeConverter fa parte di un assembly destinato alla localizzazione, che non voglio aggiungere come riferimento agli altri progetti che accedono all'enumerazione, se posso evitarlo. Inoltre, il mio approccio evita di modificare l'enumerazione condivisa, in quanto l'attributo verrà aggiunto solo nel mio programma corrente. – jcibar

risposta

7

Questa operazione può essere eseguita utilizzando la classe 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); 
+0

Ha funzionato! Ho usato il tuo codice, ma ho cambiato MyEnum a typeof (MyEnum) nell'ultima riga, per fare riferimento al tipo. – jcibar

Problemi correlati