在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.AllClients.OthersClients.CallerClients.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/

10-13 01:02