Я пытаюсь выяснить, как динамически создавать действие во время выполнения, но при этом сокращаться.Динамически сгенерируйте действие
Предположим, я хочу вызвать метод и передать динамически созданное действие, чтобы я мог отслеживать, было ли действие вызвано и т. Д. (По какой-либо причине).
void DoSomething(Action<string> action);
Это метод, который я буду ссылаться, и я хочу, чтобы как-то динамически создать действие, которое будет удовлетворять параметр.
Я знаю, что я мог бы просто построить один используя new Action<string>((s) => { });
Но в этом случае я не знаю, во время компиляции подписи действий и все, что я хочу, это супер-родовые действия, которые позволят мне знаете, если он был вызван.
Это часть системы связи для проекта, и я хочу иметь возможность поддерживать действия, которые можно использовать (подумайте о обратном вызове OnCompleted).
Proxy.DoSomething((s) => Console.WriteLine("The server said: " + s);
Я хочу, чтобы иметь возможность генерировать представление, стрелять, что по проводам, создать Action динамически на сервере, вызовите метод объекта и передать в моем динамическом действии, отправить результат обратно в клиент и вызвать действительный действие там.
Немного уточнение:
стороне клиента:
var proxy = GetProxyObject(); // Comms proxy
proxy.DoSomething((reply) => Console.WriteLine("Server said: " + reply));
Underneath:
- Discover подпись действий
- Построить внутренний объект представления (достаточно легко)
- Отправить, что через провод к серверу
стороне сервера:
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!");
}
Затем обратно на стороне клиента параметры, передаваемые в динамически генерируемые действия на сервере, реальное действие просто вызывается, с теми.
Не уверен, что вы полностью следовали за вопросом, но не для меня, чтобы передать «некоторую строку» на сервер, что кажется довольно крутым, не так ли? «Q» поступает с сервера. – Clint