我创建了一种让 SignalR 更新客户端的解耦方式,我的库在 nuget Install 上使用
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
}
}
有关更多信息,请参阅 wiki