C# SignalR.EventAggregatorProxy简单示例问题

C# 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();

我正在尝试使用signar.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>();
    }
}
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>