一个基于 dotnet ioc 实现的简单事件总线组件,项目参考了 MediatR 项目的设计思路.
- 发送带返回数据的消息
- 发送不带返回数据的消息
- 发布消息可以被多个消息处理程序接收并处理
services.AddSimpleEventBus();// 带返回参数的消息定义
public class OrderMessage : IRequest<string>
{
public int OrderId { get; set; }
}public class RequestHandler : IRequest<OrderMessage>
{
private readonly ILogger<RequestHandler> _logger;
public RequestHandler(ILogger<RequestHandler> logger)
{
_logger = logger;
}
public Task<string> HandleAsync(OrderMessage request)
{
// todo 业务逻辑的处理
return Task.FromResult(request.OrderId);
}
}public class RequestHandler : IRequest
{
private readonly ILogger<RequestHandler> _logger;
public RequestHandler(ILogger<RequestHandler> logger)
{
_logger = logger;
}
public Task HandleAsync(SomeRequest request)
{
// todo 业务逻辑的处理
return Task.CompleteTask;
}
}public class RequestHandler : INotify
{
private readonly ILogger<RequestHandler> _logger;
public RequestHandler(ILogger<RequestHandler> logger)
{
_logger = logger;
}
public Task HandleAsync(SomeRequest request)
{
// todo 业务逻辑的处理
return Task.CompleteTask;
}
}var eventBus = provider.GetRequiredService<ISimpleEventBus>();a. 发送一条带返回数据的消息
eventBus.Send<TIn, TOut>(TInObject)b. 发送一条不带返回参数的消息
eventBus.Send(TInObject)c. 发布一条消息可以被多个处理程序接收并处理
eventBus.Publish(TInObject)