C# SignalR.EventAggregatorProxy简单示例问题
我正在尝试使用signar.EventAggregatorProxy 图书馆,但我不能让我的头周围的文件或演示。我不需要使用Ninject,我只需要在服务器端使用WEB API和Angular SPA的非常简单的tes应用程序 以下是我到目前为止的情况: Startup.csC# SignalR.EventAggregatorProxy简单示例问题,c#,signalr,asp.net-web-api,eventaggregator,C#,Signalr,Asp.net Web Api,Eventaggregator,我正在尝试使用signar.EventAggregatorProxy 图书馆,但我不能让我的头周围的文件或演示。我不需要使用Ninject,我只需要在服务器端使用WEB API和Angular SPA的非常简单的tes应用程序 以下是我到目前为止的情况: Startup.cs public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR();
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
var proxy = new Lazy<IEventAggregator>(() => new Eventer());
GlobalHost.DependencyResolver.Register(typeof(IEventAggregator), () => proxy.Value);
app.MapEventProxy<Message>();
}
}
Eventer.cs类触发事件
public class Eventer : IEventAggregator
{
public void Subscribe(Action<object> handler)
{
Task.Factory.StartNew(() =>
{
int number = 0;
while (true)
{
handler.Invoke(new MyMessage { Number = number++ });
System.Threading.Thread.Sleep(1000);
}
});
}
}
和index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" ng-app="TestApp">
<head>
<title></title>
<script src="Scripts/jquery-1.6.4.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.js"></script>
<script src="Scripts/jquery.signalR.eventAggregator-1.4.141.0.js"></script>
<script src="/signalr/hubs"></script>
<script src="/eventAggregation/events"></script>
</head>
<body ng-controller="TestCtrl">
<h1>{{headerText}}</h1>
<script src="Scripts/angular.js"></script>
<script src="Scripts/jquery.signalR.eventAggregator.angular-1.4.143.0.js"></script>
<script src="Scripts/app.js"></script>
</body>
</html>
在jquery.signalR.eventAggregator.angular-1.4.143.0.js中
我肯定我错过了什么,但我不确定是什么
Wiki中有一个名为implementconstrainthandlers()的部分,根据它,它应该像从抽象类继承一样简单,但我不确定需要从这个类继承什么
我是图书馆的作者 它不是为了使用简单的数据类型作为消息而设计的 例如,您需要一个消息基类
public abstract class Message {}
创建实际的消息
public class MyMessage : Message
{
public int Number { get;set; }
}
现在在配置更改中使用基类,这是一种让库知道哪些消息应该被代理到javascript的方法
app.MapEventProxy<Message>();
现在在您的客户机中更改为
handler.Invoke(new MyMessage { Number = number++ });
$scope.eventAggregator().subscribe(EventAgrTest.Events.MyMessage, onEvent);
我应该将Invoke方法从接受类型对象更新为接受具有约束类的泛型类型。问题在于index.html文件中的JS依赖项顺序
<script src="/signalr/hubs"></script>
应该在
<script src="Scripts/jquery.signalR.eventAggregator-1.4.141.0.js"></script>
下面是它应该是什么样子
<script src="Scripts/jquery-1.6.4.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.js"></script>
<script src="/signalr/hubs"></script>
<script src="Scripts/jquery.signalR.eventAggregator-1.4.141.0.js"></script>
<script src="/eventAggregation/events"></script>
<script src="Scripts/angular.js"></script>
<script src="Scripts/jquery.signalR.eventAggregator.angular-1.4.143.0.js"></script>
这是有道理的。。。现在…谢谢!这已经解释了更多,但错误仍然存在。我已经更新了问题,包括你的建议。此外,还有另一个错误“Uncaught TypeError:无法读取未定义属性的客户端”,参考jquery.signalR.eventAggregator-1.4.141.0.js第152行。EventAgTest.Events.MyMessage真的代理正确吗?如果您使用console.log(eventagrest.Events.MyMessage),它是一个对象吗?控制台中还有其他错误吗?我希望是。上面的代码正好反映了我正在运行的代码。我添加了控制台屏幕截图,其中包含EventAgTest.Events.MyMessage的控制台日志…此行失败,似乎没有正确包含SignalR客户端库这是引发错误的地方,但在第151$行。connection.eventAggregatorProxyHub返回未定义的。。。因此,this.hub未定义,第152行的代码失败了,true没有找到。将在文件中更清楚地说明这一点。我可能会在将来进行更改,以便客户端脚本(jquery.signal.eventAggregator-1.4.141.0.js)不会直接初始化事件聚合器。那么顺序就不是很关键了。这将是一个突破性的变化,因为库的用户需要初始化事件聚合器,以确保不再发生这种情况
<script src="/signalr/hubs"></script>
<script src="Scripts/jquery.signalR.eventAggregator-1.4.141.0.js"></script>
<script src="Scripts/jquery-1.6.4.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.js"></script>
<script src="/signalr/hubs"></script>
<script src="Scripts/jquery.signalR.eventAggregator-1.4.141.0.js"></script>
<script src="/eventAggregation/events"></script>
<script src="Scripts/angular.js"></script>
<script src="Scripts/jquery.signalR.eventAggregator.angular-1.4.143.0.js"></script>