Skip to content

架构总览

语言

English

仓库

仓库作用
MvvmAIO.R3.SourceGenerators分析器、测试、Nuke 构建
MvvmAIO.R3.SourceGenerators.SamplesWPF + Avalonia 示例
R3.SourceGenerators.Docs本站(VitePress)

解决方案结构

主解决方案:MvvmAIO.R3.SourceGenerators.slnx

路径作用
MvvmAIO.R3.SourceGenerators/MvvmAIO.R3.SourceGenerators/共享生成器逻辑(.projitemsObservableEvents/ + partial)
*.Roslyn4031 / *.Roslyn4120 / *.Roslyn5000各 Roslyn 版本分析器构建
*.Package/NuGet 打包
*.Tests/Verify 快照测试
build/Nuke CI / 发布

生成器

生成器用户 API输出
ObservableEventsGeneratorFromEventsinternal 事件接口 + sealed 实现
R3CommandGenerator[R3Command]ReactiveCommand* 属性

Observable 事件管线(概要)

  1. Post-initObservableEventsGenerator.cs)— 引导未解析调用点(NullEvents)。
  2. DiscoveryObservableEventsGenerator.Discovery.cs)— 从语法收集调用目标。
  3. 接口管线InterfacePipelineInterfaceEmission / GenericConstraints)— EventInterfaces.{kind}.g.cs + 每类型 *Impl
  4. 附加路由AttachedRouted)— Avalonia 独立 Observable<T> 扩展。

静态 ObservableEventsStatics 未启用。贡献者文件布局:ObservableEventsGenerator

R3Command 管线(概要)

Post-init 注册特性、校验 partial、签名矩阵与可选 CanExecute

调用点驱动生成

在具体类型上调用 FromEvents() 等入口 API 后,生成器为该类型(及泛型约束组合)发出接口与 sealed 实现。

引导与未解析调用点

Post-init 层提供回退扩展(如 object?),保证未完成生成时仍可编译;消费程序集中 IntelliSense 优先显示类型专用重载。无可用事件的类型可能暂时解析到 NullEvents

WPF 与 Avalonia

平台要求
WPF 路由消费项目 <UseWPF>true</UseWPF>
Avalonia 路由RoutedEvent 元数据;无参重载默认路由策略
附加路由FromAttachedRoutedEvent接口属性模型

详见 Observable 事件

生成文件布局

Observable 事件 中的「生成物一览」。

当前不生成

  • 静态 OBS_* 辅助。
  • 不支持的委托 → R3SG2001 / R3SG2002

贡献者源码索引

区域文件
Observable 事件编排ObservableEventsGenerator.cs(仅 Initialize
Observable 事件(完整表)ObservableEventsGenerator — partial 与 ObservableEvents/*
事件语法ObservableEventsSyntaxFactory.cs
引导GeneratorBootstrapSyntaxFactory.cs
命令R3CommandGenerator.csR3CommandSyntaxFactory.cs
诊断Diagnostics/DiagnosticDescriptors.cs

维护者权威索引:生成器仓库 AGENTS.md

详见 Roslyn 目标

基于 MIT 许可证发布。

基于 MIT 许可证发布。