我创建了一种让 SignalR 更新客户端的解耦方式,我的库位于 nuget
安装使用
Install-Package SignalR.EventAggregatorProxy
维基:https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
该框架需要一个服务总线或“EventAggregator”才能工作,我没有为特定的服务总线或事件聚合器硬编码它,所以你必须为它创建一个代理,Caliburn micro 在进程事件聚合器中有一个轻量级的你可以安装使用
Install-Package Caliburn.Micro.EventAggregator
然后您需要在我的库和 CM.EA 之间创建一个代理,之后在您的数据访问层发布的任何消息都会自动转发给客户端。他们可以收听诸如
之类的事件
signalR.eventAggregator.subscribe(MyApp.Events.TestEvent, this.onTestEvent, this);
你也可以使用像
这样的通用事件
signalR.eventAggregator.subscribe(MyApp.Events.MyGenericEvent.of("System.String"), this.onMyGenericEvent, this);
编辑: 刚刚意识到您正在为客户端使用 WPF 而不是 JS,对此感到抱歉。目前该库是针对网络应用程序的。但是当然它也应该适用于 C# 客户端,将立即将 C# 客户端支持放在路线图上!
更新: .NET 客户端现已可用,服务器仍仅托管在 IIS 上。
Install-Package SignalR.EventAggregatorProxy.Client.DotNet
维基:https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/.NET-Client
.NET 类可以监听这样的事件
public class MyViewModel : IHandle<MyEvent>
{
public MyViewModel(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe(this);
}
public void Handle(MyEvent message)
{
//Act on MyEvent
}
}
查看维基了解更多信息