Mediator
서론
Dependency Injection 을 이용하여 의존성 문제를 해결 하였으나 그것만으로는 부족할 수 있다. library 간의 강결합을 해결 하기 위한 Event mechanism 이 필요하다.
Observer, Event Bus, Event Aggregator 등
MediatR 이라는 Mediator 를 구현한 library 를 이용해 보자
설치
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection
초기설정
Program.cs 로 이동 아래 추가
builder.Services.AddMediatR(AssemblyHelper.GetAllAssemblies().ToArray());
AssemblyHelper.cs 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class AssemblyHelper { public static List<Assembly> GetAllAssemblies(SearchOption searchOption = SearchOption.TopDirectoryOnly) { List<Assembly> assemblies = new List<Assembly>(); foreach (string assemblyPath in Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll", searchOption)) { try { var assembly = System.Runtime.Loader.AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath); assemblies.Add(assembly); } catch (Exception e) { Debug.WriteLine(e.ToString()); } } return assemblies; } } |
Ping.cs (Command 작성)
1 | public class Ping : IRequest<string> { } |
PingHandlelr.cs (Handler 작성)
1 2 3 4 5 6 7 | public class PingHandler : IRequestHandler<Ping, string> { public Task<string> Handle(Ping request, CancellationToken cancellationToken) { return Task.FromResult("Pong"); } } |
Controller 에 method 추가
1 2 3 4 5 | [HttpGet("ping")] public async Task<string> SendPing([FromServices]IMediator mediator) { return await mediator.Send(new Ping()); } |
실행 및 Test
관련 영상





댓글
댓글 쓰기