コードの一部を動的にコンパイルし、現在のクラスに追加します
-
27-10-2019 - |
質問
クラスのコンストラクター内で、その場でいくつかのプロパティを作成し、現在のクラスに追加したいと思います。プロパティのテンプレートは次のとおりです
public [PropertyType] [PropertyName]
{
get {return Container.Resolve();}
}
CodedomとReflection.emitについて少し読みましたが、この特定のユースケースでそれらを使用する方法を理解することはできませんでした。
どんな手がかりも大歓迎です。前もって感謝します
編集:質問の数のために目的について詳しく説明しています...ビューモデルロケーターのベースクラスを実装しようとしています。 XAMLのバインディングは、その経路で財産を参照することで達成されるため、プロパティでなければなりません。追加するプロパティのタイプと名前は実行時にのみ知られているため、それらを取得するために反射を使用しています。要するに、コードを使用して、指定されたクラスに動的にコンパイルする例が必要です。
解決
C#4を使用している場合は、そのために新しい動的機能を使用できます。使用する ExpandoObject
また DynamicObject
オブジェクトに動的にプロパティを追加します。 XAMLでそれらを参照すると、それらは正しく解決されます。
いずれにせよ、既存のクラスを変更することはできません。できるのは、既存のクラスから継承し、プロパティを追加できる新しいクラスを作成することです。 Xamlからそれらにバインドできるはずです。
他のヒント
XAMLのものをXMLのような何かにバインドし、ランタイムでXMLを変更します
新しいCalsを作成し、現在のクラスから継承することができます。新しいクラスは、オンザフライプロパティとベースクラスの機能を持つことができます
はい、それはこれを見てください新しい方法、既存のクラスに動的にプロパティを追加するのに必要なヘルプ