これを明確にするために、私は.net 3.5を使用しています
現在、WF RuleSet 内の個々のルールの値を確認できるようにするために、Visual Studio ビジュアライザーを作成しています。すべて問題ありませんが、次のことを行う必要があります。
「this.Age > 50」というルールがあり、1 つが MessageBox.Show("Bigger than 50") として、もう 1 つのアクションが MessageBox.Show("Less than 50") であるとします。
「this.Age > 50」というルールを選択して、true または false として評価できるようにする必要があります。または、ルールの一部を選択する必要があります。「this.Age」と評価して、70 としましょう。
この最後のビットは機能しています。RuleSet が実行されるオブジェクトを取得し、フィールドを取得して、Age という名前のフィールドを 1 つ見つけようとします。見つかった場合は、その値を取得します。フィールドが見つからない場合は、プロパティを調べます。これは機能しています。
問題は「this.Age > 50」の評価です。もちろん、この場合はパーサーを実行して評価することもできますが、問題は、「this.Age > 50」、「this.Age < 50」を評価する必要があることです...問題はご理解いただけたと思います。もちろん、たとえば「this.GetCurrentAge()」も評価したいと思います。ここで、GetCurrentAge() は、RuleSet が実行されるコンテキストのオブジェクトによって表されるクラスのメソッドです。
現在持っていてインスタンス化されているオブジェクトに、実行時にメソッドを挿入できると思いました。このようにして、次のような単純なものを作成できました
public string EvaluationMethod()
{
return (this.Age > 50).ToString();
}
この場合、実行時にこのメソッドを作成し、オブジェクトの現在のインスタンスに挿入します。
問題は、オブジェクトの現在のインスタンスにコードを挿入する方法が見つからないように見えることです。実行時に新しいクラスを作成する方法の例しか見つけることができませんが、メソッドを作成してそれを注入することについては何も見つかりません。
誰か助けてください、または他のアイデアを教えてください。
ありがとう