吴晓阳
发布于 2025-04-13 / 6 阅读
0

MediatR的使用方法

MediatR的使用方法

定义

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();