重新发明轮子:创建您自己的MediatR - 第2部分

重新发明轮子:创建您自己的MediatR - 第2部分

💡 原文约2900字/词,阅读约需11分钟。
📝

内容提要

本文介绍了如何重构Mediator库,强调代码的组织性和可测试性。作者几乎重写了所有代码,并详细阐述了项目结构、依赖注入、过滤器和处理程序的实现。接下来将添加通知系统,并展示该库的使用方法。

🎯

关键要点

  • 本文介绍了如何重构Mediator库,强调代码的组织性和可测试性。
  • 作者几乎重写了所有代码,并详细阐述了项目结构、依赖注入、过滤器和处理程序的实现。
  • 项目结构包括DependencyInjection、Executors、Inspectors、Models和Registries等文件夹。
  • DependencyInjection/DependencyInjection.cs配置了依赖注入,支持注册Handlers和Filters。
  • Executors/FilterExecutor.cs和Executors/HandlerExecutor.cs分别执行过滤器和处理程序。
  • Inspectors/ServiceInspector.cs用于检查类型并创建服务描述符。
  • Models/ServiceCategory.cs和Models/ServiceDescriptor.cs用于组织和描述服务。
  • Registries/FilterRegistry.cs和Registries/HandlerRegistry.cs管理系统中的过滤器和处理程序。
  • IRequestFilter和IRequestHandler接口定义了请求过滤器和处理程序的行为。
  • FilterExecutor确保过滤器按顺序执行,使用堆栈结构来管理执行顺序。
  • 实现了一个简单的通知系统,未来将添加通知功能。
  • 示例代码展示了如何使用Mediator库,包括创建过滤器和处理程序。
  • 最终目标是实现一个完整的Mediator库,具备所有功能。

延伸问答

如何重构Mediator库以提高代码的组织性和可测试性?

通过重写几乎所有代码,重新组织项目结构,并实现依赖注入、过滤器和处理程序的功能来提高代码的组织性和可测试性。

Mediator库的项目结构包含哪些主要文件夹?

项目结构包括DependencyInjection、Executors、Inspectors、Models和Registries等文件夹。

如何在Mediator库中配置依赖注入?

在DependencyInjection/DependencyInjection.cs中,通过AddTheMediator方法配置依赖注入,注册Handlers和Filters。

FilterExecutor的作用是什么?

FilterExecutor用于执行注册的过滤器,以处理请求在被处理之前或之后的逻辑。

如何在Mediator库中添加过滤器和处理程序?

可以通过AddServicesFromAssemblies方法自动注册,或手动通过Handlers.Add<THandler>和Filters.Add<TFilter>方法注册。

IRequestFilter和IRequestHandler接口的主要区别是什么?

IRequestFilter接口包含一个Func<Task> next参数,用于控制过滤器链的执行,而IRequestHandler接口则用于处理请求的逻辑。

➡️

继续阅读