DotNET Console Generic Host - Event Driven With MediatR
2022. 9. 9. 00:00ㆍDOTNET/Generic Host
반응형
ASPNET Core 에서 모듈간의 의존성을 줄이기 위해서 Dependency Injection 과 MediatR 을 이용하였다.
MediatR 은 Event Driven 방식의 programming 을 가능하게 하는 Event Process 의 구현 이다.
dotnet core 에서는 이 MediatR 도 Console app 에서 사용가능 하다.
물론 사용하기 위해서는 이전과 마찬가지로 Generic Host 가 필요하다.
이제 Console app 에서 Event Driven 방식을 사용하기 위해 MediatR 을 사용해 보자
설치
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection
이제 Program.cs 로 이동하자
...
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
...
services.AddMediatR(Assembly.GetExecutingAssembly());
...
})
...
AddMediatR(Assembly.GetExecutingAssembly());
를 통해서 실행되는 Assembly 에서 자동으로 Handler 를 등록한다.
(예제는 이전 강좌에서 사용하던 GenericHost app 를 계속 이어서 작업합니다.)
Command/Add.cs
using MediatR;
namespace GenericHost.Command;
public class Add : IRequest<int>
{
public int First { get; set; }
public int Second { get; set; }
}
Handler/AddService.cs
using GenericHost.Command;
using MediatR;
namespace GenericHost.Handler;
public class AddService : IRequestHandler<Add, int>
{
public Task<int> Handle(Add request, CancellationToken cancellationToken)
{
return Task.FromResult(request.First + request.Second);
}
}
Worker.cs 수정
...
using GenericHost.Command;
using MediatR;
...
private readonly IMediator _mediator;
...
public Worker(
ApiLogger logger,
IHostApplicationLifetime appLifetime,
IHelloworld helloworld,
IConfiguration configuration,
IMediator mediator) //<-- mediator 추가
{
_logger = logger;
_helloworld = helloworld;
_configuration = configuration;
_mediator = mediator; // 할당
appLifetime.ApplicationStarted.Register(OnStarted);
appLifetime.ApplicationStopping.Register(OnStopping);
appLifetime.ApplicationStopped.Register(OnStopped);
}
public async Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("1. StartAsync has been called.");
await Init();
}
private async Task Init()
{
var command = new Add
{
First = 1,
Second = 2
};
var result = await _mediator.Send(command);
_logger.LogInformation($"Add {command.First} + {command.Second} = {result}");
}
관련영상
반응형
'DOTNET > Generic Host' 카테고리의 다른 글
DotNET Console Generic Host - Logging With Serilog (0) | 2022.09.08 |
---|---|
DotNET Console Generic Host - Configuration (appsetting.json) (0) | 2022.09.07 |
DotNET Console Generic Host - Dependency Injection with Scrutor (0) | 2022.09.06 |
DotNET Console Generic Host - Create Project (0) | 2022.09.05 |