MediatR

  • 3 minutes to read

MediatR 패키지는 메시지 전송과 처리를 분리하기 위해 만들어진 중재자 패턴의 .NET 구현체입니다.

MediatR 패키지 설치

Install-Package MediatR

MediatR 사용 설정

Program.cs 파일에 다음 코드를 사용합니다.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddMediatR(Assembly.GetExecutingAssembly());

builder.Services.AddSingleton<WeatherForecastService>();

요청 및 응답

다음 내용은 MediatR 공식 사이트의 내용을 참고하였습니다.

요청 및 응답 인터페이스는 명령 및 쿼리 시나리오를 모두 처리합니다. 먼저 메시지를 작성합니다.

public class Ping : IRequest<string> { }

다음으로 처리기를 만듭니다.

public class PingHandler : IRequestHandler<Ping, string>
{
    public Task<string> Handle(Ping request, CancellationToken cancellationToken)
    {
        return Task.FromResult("Pong");
    }
}

마지막으로 중재자를 통해 메시지를 보냅니다.

var response = await mediator.Send(new Ping());
Debug.WriteLine(response); // "Pong"

메시지에 응답이 필요하지 않은 경우 AsyncRequestHandler<TRequest> 기본 클래스 를 사용하십시오.

public class OneWay : IRequest { }
public class OneWayHandlerWithBaseClass : AsyncRequestHandler<OneWay>
{
    protected override Task Handle(OneWay request, CancellationToken cancellationToken)
    {
        // Twiddle thumbs
    }
}

또는 요청이 완전히 동기식인 경우 기본 RequestHandler클래스에서 상속합니다.

public class SyncHandler : RequestHandler<Ping, string>
{
    protected override string Handle(Ping request)
    {
        return "Pong";
    }
}

요청 유형

MediatR에는 값을 반환하는 요청과 반환하지 않는 요청의 두 가지 유형이 있습니다.

  • IRequest<T>- 요청은 값을 반환합니다.
  • IRequest- 요청이 값을 반환하지 않음

실행 파이프라인을 단순화하기 위해 여기서 IRequest 상속은 터미널/무시된 반환 유형을 나타냅니다. IRequest<Unit>Unit

각 요청 유형에는 자체 처리기 인터페이스와 일부 도우미 기본 클래스가 있습니다.

  • IRequestHandler<T, U>- 이것을 구현하고 반환 Task<U>
  • RequestHandler<T, U>- 이것을 상속하고 반환

그런 다음 반환 값이 없는 요청의 경우:

  • IRequestHandler<T>- 이것을 구현하면 돌아올 것 Task<Unit>입니다.
  • AsyncRequestHandler<T>- 이것을 상속하면 돌아올 것 Task입니다.
  • RequestHandler<T>- 이것을 상속하면 아무 것도 반환하지 않습니다( void).

스트림 및 AsyncEnumerables

요청에서 스트림을 만들려면 먼저 스트림 요청과 해당 응답을 구현합니다.

IStreamRequest<TResponse>

스트림 요청 핸들러는 일반적인 것과는 별개 IRequestHandler이며 구현이 필요합니다.

IStreamRequestHandler<TRequest, TResponse>

단일을 반환하는 일반 요청 핸들러와 달리 TResponse 스트림 핸들러는 다음을 반환합니다 IAsyncEnumerable<TResponse>.

IAsyncEnumerable<TResponse> Handle(TRequest request, CancellationToken cancellationToken);

스트림 요청 처리기를 만들려면 IStreamRequestHandler<TRequest, TResponse> 위의 Handle 메서드를 구현하고 구현하는 클래스를 만듭니다.

알림

알림의 경우 먼저 알림 메시지를 만듭니다.

public class Ping : INotification { }

다음으로 알림에 대해 0개 이상의 핸들러를 만듭니다.


public class Pong1 : INotificationHandler<Ping>
{
    public Task Handle(Ping notification, CancellationToken cancellationToken)
    {
        Debug.WriteLine("Pong 1");
        return Task.CompletedTask;
    }
}

public class Pong2 : INotificationHandler<Ping>
{
    public Task Handle(Ping notification, CancellationToken cancellationToken)
    {
        Debug.WriteLine("Pong 2");
        return Task.CompletedTask;
    }
}

마지막으로 중재자를 통해 메시지를 게시합니다.

await mediator.Publish(new Ping());
더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com