MST

星途 面试题库

面试题:C# 中使用 MediatR 框架实现简单消息传递场景

假设你有一个简单的业务场景,当用户注册成功后,需要发送一条欢迎消息。请使用 C# 和 MediatR 框架来设计并实现这个消息传递机制,阐述设计思路并给出关键代码示例。
47.7万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义事件:首先定义一个用户注册成功的事件,包含用户相关信息。
  2. 定义事件处理程序:创建一个处理该事件的类,用于发送欢迎消息。
  3. 使用MediatR:利用MediatR框架来实现事件的发布和处理。注册MediatR相关服务,以便在用户注册成功时能够调用处理程序发送欢迎消息。

关键代码示例

  1. 定义事件
public class UserRegisteredEvent
{
    public string UserName { get; set; }
    public string Email { get; set; }

    public UserRegisteredEvent(string userName, string email)
    {
        UserName = userName;
        Email = email;
    }
}
  1. 定义事件处理程序
using MediatR;
using System.Threading;
using System.Threading.Tasks;

public class UserRegisteredEventHandler : INotificationHandler<UserRegisteredEvent>
{
    public async Task Handle(UserRegisteredEvent notification, CancellationToken cancellationToken)
    {
        // 发送欢迎消息逻辑,这里简单模拟
        await Task.Run(() =>
        {
            System.Console.WriteLine($"欢迎 {notification.UserName},您的邮箱是 {notification.Email}");
        });
    }
}
  1. 注册MediatR服务Startup.cs 中的 ConfigureServices 方法里:
using MediatR;
using System.Reflection;

public void ConfigureServices(IServiceCollection services)
{
    // 注册MediatR
    services.AddMediatR(Assembly.GetExecutingAssembly());
}
  1. 触发事件 在用户注册成功的逻辑中:
using MediatR;
using System.Threading.Tasks;

public class UserRegistrationService
{
    private readonly IMediator _mediator;

    public UserRegistrationService(IMediator mediator)
    {
        _mediator = mediator;
    }

    public async Task RegisterUser(string userName, string email)
    {
        // 假设这里完成用户注册逻辑

        // 发布用户注册成功事件
        await _mediator.Publish(new UserRegisteredEvent(userName, email));
    }
}