💡
原文约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接口则用于处理请求的逻辑。
➡️