定义
using MediatR;
namespace WebApplication1
{
public class GreetingCommand : IRequest<string>
{
public string Name { get; set; }
}
public class GreetingCommandHandler : IRequestHandler<GreetingCommand, string>
{
public Task<string> Handle(GreetingCommand request, CancellationToken cancellationToken)
{
return Task.FromResult($"Hello, {request.Name}!");
}
}
}
调用
using MediatR;
using Microsoft.AspNetCore.Mvc;
namespace WebApplication1.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController(IMediator mediator, ILogger<WeatherForecastController> logger) : ControllerBase
{
[HttpGet("GetGreeting")]
public async Task<IActionResult> GetGreeting(string name)
{
var result = await mediator.Send(new GreetingCommand { Name = name });
return Ok(result);
}
}
注册服务
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(GreetingCommandHandler).Assembly));
完整Program.cs文件
using WebApplication1;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
//builder.Services.AddSwaggerGen();
// Fix: Use the correct overload for AddMediatR
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(GreetingCommandHandler).Assembly));
var app = builder.Build();
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
//app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/openapi/v1.json", "v1");
});
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();