C# 特性问题:signalr 如何允许从 hub 调用客户端函数?

C# Feature Quetion : How does signalr allow calling of client functions from hub?

SignalR如何让开发者调用c#中没有定义的函数名。一个例子是:

Clients.All.sayHello("Greetings!");

尚未定义 sayHello(string msg)。 intellisense 没有按预期接收它,但我很好奇他们如何在库中实现它以允许它。

这一切背后的基础是Dynamic Objects。这些允许您在运行时而不是编译时提供新类型成员:

Dynamic objects expose members such as properties and methods at run time, instead of in at compile time. This enables you to create objects to work with structures that do not match a static type or format.

(或者,如此处,其中 javascript 定义在运行时才可用)

要创建您自己的具有此类行为的 class,您可以扩展 DynamicObject

您也可以通过查看 source:

来发现这一点
public class ClientProxy : DynamicObject, IClientProxy
{
    ...