Kompilieren Sie dynamisch Code und fügen Sie es der aktuellen Klasse hinzu
-
27-10-2019 - |
Frage
Ich möchte mehrere Eigenschaften im Fliegen im Konstruktor der Klasse erstellen und der aktuellen Klasse hinzufügen. Die Vorlage der Eigenschaft ist die folgende
public [PropertyType] [PropertyName]
{
get {return Container.Resolve();}
}
Ich habe ein wenig über codedom und reflection.emit gelesen, konnte aber nicht herausfinden, wie sie in diesem speziellen Anwendungsfall verwendet werden.
Jeder Hinweis wäre sehr geschätzt. Danke im Voraus
Bearbeiten: Ich nehme aufgrund der Anzahl der Fragen auf den Zweck ein. Ich versuche, die Basisklasse für einen Ansichtsmodell -Locator zu implementieren. Die Bindung in XAML wird erreicht, indem sie sich auf eine Eigenschaft auf ihren Pfad bezieht, daher muss sie eine Eigenschaft sein. Die Typen und Namen der zugefügten Eigenschaften sind nur zur Laufzeit bekannt. Daher verwende ich Reflexion, um sie zu erhalten. Kurz gesagt, ich brauche ein Beispiel dafür, ein Stück Code zu nehmen und ihn dynamisch in die gegebene Klasse zu kompilieren.
Lösung
Wenn Sie unter C# 4 sind, können Sie die neuen dynamischen Funktionen dafür verwenden. Verwenden ExpandoObject
oder DynamicObject
Um Ihrem Objekt dynamisch Eigenschaften hinzuzufügen. Wenn Sie dann in XAML auf sie verweisen, werden sie richtig gelöst.
In jedem Fall ist es nicht möglich, die vorhandene Klasse zu ändern. Was Sie können, ist, eine neue Klasse zu erstellen, die von der vorhandenen Klasse erben und die Eigenschaften dazu hinzufügen kann. Sie sollten in der Lage sein, von XAML an sie zu binden.
Andere Tipps
Alternativer Ansatz:
Sie können icustomtypedescriptor implementieren und die zusätzlichen Eigenschaften bereitstellen
Verknüpfung: Probleme mit der Bindung von Gitterdaten
Binden Sie Ihr XAML -Zeug an etwas wie XML und ändern Sie XML in der Laufzeit
Sie können neue Cals erstellen und aus der aktuellen Klasse erben. Die neue Klasse kann die Funktionen in Fliegen und Basisklassen haben
Ja, es ist möglich, sich das anzusehenHilfe beim Hinzufügen neuer Methoden, Eigenschaften in vorhandene Klassen dynamisch