Myk*_*ych 8 asp.net controller event-handling signalr signalr-hub
我有一个 web api 控制器,我想在其中使用事件处理程序。更具体地说,我有一个MessagesController
,当执行 action 方法时,WriteMessage
我想触发一个SignalR Hub method
将订阅a 的事件,该方法将向所有必要的接收者广播消息。看看下面的简化代码:
这是控制器:
public class MessagesController : ApiController
{
private readonly IMessageService _messageService;
public EventHandler<MessageEventArgs> MessageSent;
public MessagesController(IMessageService messageService)
{
_messageService = messageService;
}
public IHttpActionResult WriteMessage(Message message)
{
try
{
//here I'm using MessageService to write the message to the data base
_messageService.WriteMessage(message);
//after the message was saved successfully I would like to trigger the event that will fire a signalR hub's method
OnMessageSent(message);
return Content(HttpStatusCode.Created, message);
}
//some exception handling
catch (Exception ex)
{
...
}
}
protected void OnMessageSent(Message message)
{
if (MessageSent!= null)
MessageSent(this,new MessageEventArgs{Message = message});
}
}
Run Code Online (Sandbox Code Playgroud)
这是 SignalR 集线器(这只是一个快速概述,我还没有测试过):
public class MessagesHub : Hub
{
public static void Send(string message)
{
Clients.All.send(message);
}
public void OnMessageSent(object source, MessageEventArgs args)
{
Send(args.Message.Text);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想以某种方式订阅控制器的事件处理程序。如果是普通课程,我会做这样的事情:
messagesController.MessageSent+=messagesHub.OnMessageSent
由于这是一个控制器,我无法控制它的创建,因此我可能无法执行上述操作。当然,我可以避免使用事件而MessagesHub.Send
直接在控制器的方法中调用,但是事件驱动的方法将与SiganlR
控制器解耦,总体而言似乎是一个更优雅的解决方案。你能给点建议吗?
归档时间: |
|
查看次数: |
1269 次 |
最近记录: |