如何在ASP.NET Core 7中配置Brighter?求有效启动及控制器示例
在ASP.NET Core 7中配置Brighter的实操指南
一、核心NuGet包安装
先安装必备的Brighter相关包:
Paramore.Brighter.AspNetCoreParamore.Brighter.Extensions.DependencyInjection
二、Program.cs启动配置示例
var builder = WebApplication.CreateBuilder(args); // 注册Brighter服务 builder.Services.AddBrighter(options => { // 设置处理器生命周期为Scoped,适配ASP.NET Core请求生命周期 options.HandlerLifetime = ServiceLifetime.Scoped; }) // 扫描当前程序集内的命令处理器 .AddHandlersFromAssemblies(typeof(Program).Assembly) // 使用内存Outbox,适合开发测试场景 .UseInMemoryOutbox(); // 添加MVC控制器支持 builder.Services.AddControllers(); var app = builder.Build(); // 中间件管道配置 app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
三、基础命令与处理器实现
1. 定义命令
public class GreetingCommand : ICommand { public string Name { get; set; } public string ResponseMessage { get; set; } }
2. 实现同步命令处理器
public class GreetingCommandHandler : RequestHandler<GreetingCommand> { public override GreetingCommand Handle(GreetingCommand command) { // 这里编写实际业务逻辑,比如数据持久化、第三方服务调用等 command.ResponseMessage = $"Hello, {command.Name}!"; return command; } }
3. 实现异步命令处理器(可选)
public class AsyncGreetingCommandHandler : AsyncRequestHandler<GreetingCommand> { public override async Task<GreetingCommand> HandleAsync(GreetingCommand command, CancellationToken cancellationToken = default) { await Task.Delay(100, cancellationToken); command.ResponseMessage = $"Async Hello, {command.Name}!"; return command; } }
四、Controller调用示例
[ApiController] [Route("api/[controller]")] public class GreetingController : ControllerBase { private readonly IAmACommandProcessor _commandProcessor; // 构造函数注入命令处理器 public GreetingController(IAmACommandProcessor commandProcessor) { _commandProcessor = commandProcessor; } [HttpPost] public async Task<IActionResult> SendGreeting([FromBody] GreetingCommand command) { await _commandProcessor.SendAsync(command); return Ok(command.ResponseMessage); } }
五、关键配置说明
- 若需使用持久化Outbox(如SQL Server),需安装对应扩展包(如
Paramore.Brighter.Outbox.SqlServer),并将UseInMemoryOutbox()替换为UseSqlServerOutbox(builder.Configuration.GetConnectionString("DefaultConnection")) - 命令处理器需严格实现
RequestHandler<T>或AsyncRequestHandler<T>接口,Brighter会自动扫描注册 - 若命令/处理器不在当前程序集,需在
AddHandlersFromAssemblies中手动指定目标程序集
内容的提问来源于stack exchange,提问作者Rosdi Kasim
相关产品推荐
相关产品推荐

