実行時にアクションを動的に作成する方法を見つけようとしていますが、不足しています。
メソッドを呼び出して、動的に作成されたアクションを渡したいとしましょう。これにより、アクションが呼び出されたかどうかなどを (何らかの理由で) 追跡できます。
void DoSomething(Action<string> action);
これが私が呼び出すメソッドであり、パラメーターを満たす Action を何らかの方法で動的に構築したいと考えています。
を使用して構築できることを知っていますnew Action<string>((s) => { });
しかし、この場合、コンパイル時に Action の署名がわからず、必要なのは、それが呼び出されたかどうかを知らせる超汎用の Action だけです。
これはプロジェクトの通信システムの一部であり、使用可能なアクションをサポートできるようにしたいと考えています (OnCompleted コールバックを考えてください)。
Proxy.DoSomething((s) => Console.WriteLine("The server said: " + s);
表現を生成し、それをネットワーク経由で撮影し、サーバー上で動的にアクションを作成し、オブジェクトでメソッドを呼び出して動的アクションを渡し、結果をクライアントに送り返し、そこで実際のアクションを呼び出したい.
少し説明:
クライアント側:
var proxy = GetProxyObject(); // Comms proxy
proxy.DoSomething((reply) => Console.WriteLine("Server said: " + reply));
以下:
- アクションの署名を発見する
- 内部表現オブジェクトを作成する (簡単です)
- それをネットワーク経由でサーバーに送信します
サーバ側:
void ReceivedMessage(msg)
{
var actParam = msg.Parameters[0]; // This is obviously just for demonstration
var action = BuildActionWrapper(actParam);
var result = target.InvokeMethod("DoSomething", action.UnderlyingAction);
// Send result and Action result back to client
ReplyToClient(...);
}
void DoSomething(Action<string> act)
{
act("HELLO!");
}
次に、サーバー上で動的に生成されたアクションに渡されたパラメーターをクライアント側に戻すと、実際のアクションはそれらで呼び出されます。