零基础写框架:从零设计一个模块化和自动服务注册框架
内容提要
Maomi.Core是一个支持模块化开发和自动服务注册的.NET开发框架,提供了依赖注入和循环依赖检测的功能。文章介绍了如何使用该框架创建模块化应用和制作项目模板。
延伸解读
模块化设计的核心优势
Maomi.Core 通过模块类(实现 IModule 接口)封装程序集的初始化和配置,使开发者无需手动管理程序集加载顺序。模块间依赖通过 [InjectModule] 特性声明,框架自动构建依赖树并按后序遍历初始化,确保底层模块优先启动。这种设计降低了大型项目中程序集耦合度,尤其适合需要动态扩展或插件化架构的场景。
自动服务注册的灵活配置
使用 [InjectOn] 特性可自动将类注册到 DI 容器,默认注册所有接口为 Transient 生命周期。通过 InjectScheme 枚举可精细控制注册行为:OnlyInterfaces 仅注册接口,OnlyBaseClass 仅注册父类,Some 手动指定类型,None 完全跳过。Own 参数决定是否注册自身。这种灵活性避免了手动编写大量 services.AddTransient 代码,同时支持复杂继承关系的精确控制。
循环依赖检测机制
框架使用 ModuleNode 树结构表示模块依赖,每个节点包含 ParentModule 引用。检测循环依赖时,从当前节点向上遍历父节点链,若发现相同模块类型则抛出异常。例如 C 依赖 A、B,A 又依赖 C 时,从 C1 节点向上查找会重复遇到 C 模块,从而识别循环。该机制在构建依赖树阶段即拦截问题,避免运行时初始化死锁。
从框架到模板的工程化实践
文章不仅讲解框架实现,还涵盖单元测试、NuGet 打包和项目模板制作。通过 MaomiPack.csproj 配置 PackageType 为 Template,并编写 template.json 定义模板元数据,可将模块化应用结构打包为 dotnet new 模板。企业团队可借此统一项目脚手架,业务开发者只需执行 dotnet new maomi --name MyApp 即可生成包含模块化基础代码的解决方案,提升开发效率。
Q&A
Maomi.Core框架的主要功能是什么?
Maomi.Core框架支持模块化开发和自动服务注册,提供依赖注入和循环依赖检测功能。
如何在Maomi.Core中实现模块的自动服务注册?
通过在类上添加[InjectOn]特性,可以自动注册服务到容器中。
Maomi.Core如何处理模块之间的依赖关系?
Maomi.Core使用树结构表示模块之间的依赖关系,并支持循环依赖检测。
在Maomi.Core中,模块类需要实现什么接口?
模块类需要实现IModule接口,并在ConfigureServices方法中编写初始化代码。
如何在Maomi.Core中确定模块的初始化顺序?
模块初始化顺序通过后序遍历模块树来确定。
Maomi.Core框架支持哪些类型的项目?
Maomi.Core框架支持控制台、Web项目和WPF项目。