1

我已经导入了 SignalR Nuget 包,并且 SignalR 示例在我的项目中运行良好。但即使在拥有所有必需的 using 语句之后,我也无法让智能感知为 SignalR 中的类(如 Hub 类)工作。

4

2 回答 2

2

集线器代理是在运行时动态生成的,因此您不会获得任何智能感知。

您可以使用 Hubify.exe(参见http://weblogs.asp.net/davidfowler/archive/2012/06/10/signalr-0-5-1-released.aspx上的 Hubify 部分)生成静态 javascript-文件。

或者您可以创建自己的 T4 模板来做同样的事情。见:https ://github.com/SignalR/SignalR/issues/106

更新:

关于 C# 的智能感知 你不会得到Clientsand的智能感知Caller,因为它们是动态的。

缺少编译时类型检查也会导致缺少 IntelliSense。因为 C# 编译器不知道对象的类型,所以它无法枚举其属性和方法。这个问题可以通过额外的类型推断来解决,就像在 Visual Studio 的 IronPython 工具中所做的那样,但目前 C# 不提供它。 http://visualstudiomagazine.com/articles/2011/02/01/understanding-the-dynamic-keyword-in-c4.aspx

public class Chat : Hub 
  {
      public void Send(string message) 
      {
          // No intellisense for addMessage, sorry
          Clients.addMessage(message);
      }
  }
于 2012-08-28T12:02:46.740 回答
1

在此处查看 SignalR 文档 ,Hub.Caller 和客户端本质上是动态的。
dynamic是 .Net 4 中添加的新关键字,并且 dosent 支持编译时检查,因此您无法获得动态对象的智能感知。仅在运行时检查所有动态对象。因此,即使您自己创建了一个动态对象,例如

dynamic d = new ExpandoObject();

并尝试这样做"d."。你不会得到任何智能感知,因为框架知道动态对象中存在什么。并且只会在运行时被发现。

于 2012-08-29T09:25:55.573 回答