DEV Community

Cover image for Simplify Component Communication in .NET with MediatR
Akalanka Gajasinghe
Akalanka Gajasinghe

Posted on

Simplify Component Communication in .NET with MediatR

MediatR, the acclaimed NuGet package, is a game-changer for .NET development, revolutionizing the way we handle communication and achieve loose coupling between components. Let's explore the key features of MediatR in this LinkedIn post:

🔹 Mediator Pattern Made Easy:

MediatR provides a robust implementation of the mediator pattern for .NET, enabling seamless communication and decoupling between components. Say goodbye to rigid dependencies and welcome scalable and maintainable applications.

🔹 Request/Response Messages:

With MediatR, you can dispatch request/response messages effortlessly. These messages are directed to a single handler responsible for processing them. This approach streamlines your codebase and promotes a clear separation of concerns, enhancing the overall maintainability and testability of your application.

🔹 Notification Messages:

MediatR takes it a step further by enabling the dispatching of notification messages. These messages are distributed to multiple handlers, allowing you to implement publish/subscribe or observer patterns within your application. This flexibility empowers you to build highly extensible and event-driven systems.

By leveraging MediatR in your .NET projects, you unlock the following benefits:

✅ Simplified communication and reduced coupling between components.

✅ Clean separation of concerns, resulting in highly maintainable code.

✅ Improved testability with easy mocking and unit testing of individual handlers.

✅ Enhanced extensibility through the publish/subscribe mechanism for notification messages.

Join the growing community of developers embracing MediatR and revolutionize your application architecture today!

//Inject MediatR to your DI container
services.AddMediatR(cfg => {
    cfg.RegisterServicesFromAssembly(typeof(Program).Assembly);
});

// Request/response messages
public class CreateTodoItemCommand : IRequest<int> { }
public class CreateTodoItemCommandHandler : IRequestHandler<CreateTodoItemCommand, int>
{
    public Task<int> Handle(CreateTodoItemCommandrequest, CancellationToken cancellationToken)
    {
        // Your application logic
       return Task.FromResult(0);
    }
}

// Notification messages
public class TodoItemCompletedEvent: INotification { } 

public class TodoItemCompletedEventHandler : INotificationHandler<TodoItemCompletedEvent>
{
    public Task Handle(TodoItemCompletedEvent notification, CancellationToken cancellationToken)
    {
        // Your application logic
        return Task.CompletedTask;
    }
}

public class TodoItemCompletedSendMailEventHandler : INotificationHandler<TodoItemCompletedEvent>
{
    public Task Handle(TodoItemCompletedEvent notification, CancellationToken cancellationToken)
    {
        // Your application logic
        return Task.CompletedTask;
    }
}

// Let's Call
// private ISender _mediator;
_mediator.Send(new CreateTodoItemCommand())

// private IPublisher _publisher;
_publisher.Publish(new TodoItemCompletedEvent());

Enter fullscreen mode Exit fullscreen mode

Top comments (0)