У меня есть интерфейс с кучей методов с разными сигнатурами (контекст здесь - интерфейс обратного вызова WCF). У моего сервера есть список клиентов. В ответ на события я хочу вызвать метод интерфейса на каждом клиенте. Вокруг этого вызова есть куча кодов базовой платы (проверьте, активен ли клиент, должен ли этот клиент быть включен в список для обратного вызова, попробуйте перехватить, отбросить клиента, если операция не удалась и т. Д.). Каков наилучший способ вытащить этот код панели в общий CallBackClients (SomeKindOfGenericDeligate method_to_call), где method_to_call является одним из методов интерфейса.
ICallback {
void Fish(string my_string);
void SuperFish(int my_int, double my_double);
... etc ...
}
CallBackClients( -- ?? generic delegate ?? -- ) {
foreach (IClientCallback client in client_list) {
// The boiler plate code:
if (((ICommunicationObject)client.callback).State == CommunicationState.Opened) {
try {
Do method call based on delagate / lamda code passed in - how ??
}
catch (Exception e) {
Remove_client(client, method.ToString(), e);
}
}
else
Remove_client(client, method.ToString());
}
}
}
Псевдокод для звонящего:
void EventHandler_A() {
// Call Fish method on all clients:
CallBackClients(Fish("hello"));
}
void EventHandler_B() {
// Call SuperFish method on all clients:
CallBackClients(SuperFish(10, 5.3);
}