【发布时间】:2019-05-27 14:55:22
【问题描述】:
我正在学习 .Net Core SignalR 并研究如何将它与我的应用程序实时图表一起使用。我在网上玩了一些例子,它们都可以工作,但我不知道如何将 SignalR 与数据库轮询一起使用。我收到以下错误:
无法访问已处置的对象...
我假设它与请求完成后正在处理我的上下文有关。我正在使用依赖注入。
聊天控制器
public class ChatController : ControllerBase
{
private IChatService _chatService;
private IChatContext<ChatHub> _hub;
public ChatController(IChatContext<ChatHub> hub, IChatService chatService)
{
_hub = hub;
_chatService = chatService;
}
public IActionResult Get()
{
var timerManager = new TimerManager(() => _hub.Clients.All.SendAsync("transferchatdata", _chatService.ChatDataByProds()));
return Ok(new { Message = "Request Completed" });
}
}
聊天服务
public interface IChatService
{
IEnumerable<ChatDataByProd> ChatDataByProds();
}
public class ChatService : IChatService
{
private ChatContext _context;
public ChatService(ChatContext context)
{
_context = context;
}
public IEnumerable<ChatDataByProd> ChatDataByProds()
{
return _context.ChatDataByProds;
}
}
聊天中心
public class ChatHub : Hub
{
}
【问题讨论】:
-
什么是
TimerManager? -
它只是一个静态类,用于管理我们下次检查db中的数据时,但我会在以后将其更改为SqlDependency
-
嗯,它不是一个静态类,因为你正在更新它,所以你可能的意思是它上面有一个静态字段来存储一个计时器。那是你的问题。静力学和 DI 就像油和水。
标签: .net-core signalr asp.net-core-signalr