Compilare pezzo di codice in modo dinamico e aggiungerlo alla classe corrente
-
27-10-2019 - |
Domanda
Voglio creare diverse proprietà al volo all'interno del costruttore della classe e aggiungerli alla classe corrente. Il modello della proprietà è il seguente
public [PropertyType] [PropertyName]
{
get {return Container.Resolve();}
}
Ho letto un po 'di CodeDom e Reflection.Emit, ma non sono stati in grado di capire come usarli in questo particolare caso d'uso.
Qualsiasi indizio sarebbe molto apprezzato. Grazie in anticipo
EDIT: Sto elaborando lo scopo a causa del numero di domande ... Sto cercando di implementare la classe base per una vista del modello localizzatore. Il legame in XAML è raggiunto attraverso riferisce a una proprietà dal suo percorso, quindi deve essere una proprietà. I tipi e nomi delle proprietà da aggiungere sono noti solo in fase di esecuzione, quindi sto usando la riflessione per farli. In breve, ho bisogno di un esempio di prendere un pezzo di codice e compilarlo in modo dinamico nella classe data.
Soluzione
Se hai meno di C # 4, è possibile utilizzare le nuove funzionalità dinamiche per questo. Usa ExpandoObject
o DynamicObject
per aggiungere proprietà al vostro oggetto in modo dinamico. Se poi si fa riferimento a loro in XAML, avranno risolto correttamente.
In ogni caso, non è possibile modificare classe esistente. Che cosa si può è quello di creare una nuova classe, che può ereditare dalla classe esistente, e aggiungere le proprietà a questo. Si dovrebbe essere in grado di legarsi a loro da XAML.
Altri suggerimenti
approccio alternativo:
si potrebbe implementare ICustomTypeDescriptor e fornire le proprietà aggiuntive
vincolare il proprio roba XAML per somthing come XML e il cambiamento xml nel runtime
È possibile creare nuovi calss ed ereditare dalla classe corrente, la nuova classe può avere la funzionalità sulla proprietà mosca e classe di base
Sì, è possibile prendere un'occhiata a questo richiesto l'aggiunta di nuovi metodi, proprietà in esistenti classi dinamicamente