感谢您对 Modulus 项目的关注!本指南将帮助您开始参与项目贡献。
Modulus 是一个具有多宿主架构的模块化 .NET 应用框架:
- UI 无关的核心层: Domain 和 Application 代码不能依赖任何 UI 框架
- 多宿主支持: 相同的业务逻辑可在所有支持的宿主上运行 (Blazor、Avalonia 及未来的宿主)
- 垂直切片模块: 每个功能是一个独立的模块,包含自己的各层
- 依赖金字塔: Presentation → UI Abstraction → Application → Domain → Infrastructure
src/
├── Modulus.Core/ # 运行时、ModuleLoader、DI、MediatR
├── Modulus.Sdk/ # SDK 基类 (ModuleBase, 属性)
├── Modulus.UI.Abstractions/ # UI 契约 (IMenuRegistry, IThemeService)
├── Hosts/
│ ├── Modulus.Host.Blazor/ # MAUI + MudBlazor
│ └── Modulus.Host.Avalonia/ # Avalonia UI
└── Modules/
└── <ModuleName>/
├── <ModuleName>.Core/ # Domain + Application (UI 无关)
├── <ModuleName>.UI.Avalonia/ # Avalonia 视图
└── <ModuleName>.UI.Blazor/ # Blazor 组件
创建新模块时:
- Core 项目: 包含 ViewModel 和业务逻辑,仅引用
Modulus.Sdk和Modulus.UI.Abstractions - UI 项目: 宿主特定的视图,引用 Core 项目和 UI 框架
- 清单文件:
manifest.json描述模块元数据和程序集映射 - 属性: 使用
[Module]、[AvaloniaMenu]、[BlazorMenu]进行声明式注册
详细说明请参阅 快速入门指南。
- Fork 本仓库
- 克隆您的 fork:
git clone https://github.com/your-username/modulus.git - 创建新分支:
git checkout -b feature/your-feature-name - 进行修改
- 运行测试:
dotnet test - 提交更改:
git commit -m "Add feature" - 推送到您的 fork:
git push origin feature/your-feature-name - 创建 Pull Request
- 所有面向用户的文档都应有英文和中文版本
- 所有 Story 文档必须有双语版本(位于
docs/en-US/stories/和docs/zh-CN/stories/) - 遵循 Story 命名约定:
S-XXXX-标题.md - 在 Story 文档中包含优先级和状态标签
- 类名和公共成员使用 PascalCase
- 局部变量和参数使用 camelCase
- 私有字段前缀使用下划线 (
_privateField) - 为公共 API 添加 XML 文档注释
- 为所有新功能编写单元测试
# 运行 Avalonia 宿主
dotnet run --project src/Hosts/Modulus.Host.Avalonia
# 运行 Blazor 宿主
dotnet run --project src/Hosts/Modulus.Host.Blazor
# 运行所有测试
dotnet test- 使用 Nuke 构建系统:
nuke --help查看可用目标 - 构建所有组件:
nuke build - 运行测试:
nuke test - 打包插件:
nuke plugin
- 确保您的代码遵循项目的风格指南
- 根据需要更新文档
- 为新功能包含测试
- 提交前确保所有测试通过
- 在 PR 描述中链接任何相关议题
- 等待项目维护者的审核
如果您有任何问题,请随时开 issue 或加入我们的社区渠道。