SignalR.EventAggregatorProxy 简单示例问题
SignalR.EventAggregatorProxy simple example issues
我正在尝试使用 SignalR.EventAggregatorProxy
图书馆,但我无法理解文档或演示。我不需要使用 Ninject,我只需要在服务器端使用 WEB API 和 Angular SPA 的非常简单的 tes 应用程序。
这是我目前的情况:
Startup.cs
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>();
}
}
消息classes
public abstract class Message {}
public class MyMessage : Message
{
public int Number { get; set; }
}
Eventer.cs class 触发事件
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);
}
});
}
}
简单app.js
(function () {
'use strict';
var app = angular.module("TestApp", ['signalR.eventAggregator']);
app.controller("TestCtrl", ['$scope','$http', function ($scope, $http) {
function onEvent(e) {
console.log("event received => ", e);
};
$scope.eventAggregator().subscribe(EventAgrTest.Events.MyMessage, onEvent);
$scope.headerText = "HEADER";
}]);
})();
和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>
当我 运行 应用程序时,我收到 "TypeError: Cannot read property 'subscribe' of undefined" 指向行
的错误
signalR.eventAggregator.subscribe(type, function(e) { ...
在jquery.signalR.eventAggregator.angular-1.4.143.0.js
我确定我遗漏了什么,但我不确定是什么。
Wiki 中有一个名为实施约束处理程序 (https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/Implement-constraint-handlers) 的部分,它应该像继承抽象 class 一样简单,但我不确定需要继承什么这个class.
我是图书馆的作者,
它不是为使用简单数据类型作为消息而设计的。
例如,您需要一个消息库 class
public abstract class Message {}
创建一条实际消息
public class MyMessage : Message
{
public int Number { get;set; }
}
现在在配置更改中使用基础 class,这是一种让库知道应该代理哪个消息的方法 javascript
app.MapEventProxy<Message>();
在您的活动代理更改为
handler.Invoke(new MyMessage { Number = number++ });
现在在您的客户端中更改为
$scope.eventAggregator().subscribe(EventAgrTest.Events.MyMessage, onEvent);
我应该将 Invoke 方法从采用类型对象更新为采用具有约束的泛型类型 class
问题出在 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>
确实有道理……现在……
我正在尝试使用 SignalR.EventAggregatorProxy 图书馆,但我无法理解文档或演示。我不需要使用 Ninject,我只需要在服务器端使用 WEB API 和 Angular SPA 的非常简单的 tes 应用程序。
这是我目前的情况:
Startup.cs
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>();
}
}
消息classes
public abstract class Message {}
public class MyMessage : Message
{
public int Number { get; set; }
}
Eventer.cs class 触发事件
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);
}
});
}
}
简单app.js
(function () {
'use strict';
var app = angular.module("TestApp", ['signalR.eventAggregator']);
app.controller("TestCtrl", ['$scope','$http', function ($scope, $http) {
function onEvent(e) {
console.log("event received => ", e);
};
$scope.eventAggregator().subscribe(EventAgrTest.Events.MyMessage, onEvent);
$scope.headerText = "HEADER";
}]);
})();
和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>
当我 运行 应用程序时,我收到 "TypeError: Cannot read property 'subscribe' of undefined" 指向行
的错误signalR.eventAggregator.subscribe(type, function(e) { ...
在jquery.signalR.eventAggregator.angular-1.4.143.0.js
我确定我遗漏了什么,但我不确定是什么。
Wiki 中有一个名为实施约束处理程序 (https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/Implement-constraint-handlers) 的部分,它应该像继承抽象 class 一样简单,但我不确定需要继承什么这个class.
我是图书馆的作者,
它不是为使用简单数据类型作为消息而设计的。
例如,您需要一个消息库 class
public abstract class Message {}
创建一条实际消息
public class MyMessage : Message
{
public int Number { get;set; }
}
现在在配置更改中使用基础 class,这是一种让库知道应该代理哪个消息的方法 javascript
app.MapEventProxy<Message>();
在您的活动代理更改为
handler.Invoke(new MyMessage { Number = number++ });
现在在您的客户端中更改为
$scope.eventAggregator().subscribe(EventAgrTest.Events.MyMessage, onEvent);
我应该将 Invoke 方法从采用类型对象更新为采用具有约束的泛型类型 class
问题出在 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>
确实有道理……现在……