在SignalR中,在HubConnectionContext中定义了公共(public)属性,如下所示:
public dynamic All { get; set; }
这使用户可以像这样称呼它:
All.someMethodName();
,这很出色。现在,我想在函数中使用传入参数来调用此函数。我怎样才能做到这一点?
如:
All.<my variable as method name>();
有什么办法吗?
谢谢
编辑示例:
public void AcceptSignal(string methodToCall, string msg)
{
Clients.All.someMethod(msg); // THIS WORKS
Clients.All.<methodToCall>(msg); // THIS DOES NOT WORK (But I would like it to!)
}
最佳答案
尽管我喜欢所有有趣的反射答案,但是有一种使用字符串作为方法Name的方法来调用客户端中心方法的方法要简单得多,而且速度更快。Clients.All
,Clients.Others
,Clients.Caller
,Clients.AllExcept(connectionIds)
,Clients.Group(groupName)
,Clients.OthersInGrouop(groupName)
和Clients.Client(connectionId)
都是动态对象,但它们也都实现了IClientProxy接口(interface)。
您可以将任何这些动态对象转换为IClientProxy
,然后调用Invoke(methodName, args...):
public void AcceptSignal(string methodToCall, string msg)
{
IClientProxy proxy = Clients.All;
proxy.Invoke(methodToCall, msg);
}
关于c# - 如何使用动态对象将变量用作方法名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16079813/