Skip to content

诊断

DesignPatterns 源生成器与分析器发出的编译器诊断。ID 定义于 DesignPatterns.Diagnostics.DiagnosticIds

IDE 帮助链接指向本页(#dp### 锚点)。

Singleton(DP001–DP002)

ID级别触发条件
DP001Error[GenerateSingleton] 目标不是 partial
DP002Error无效的单例目标

Strategy(DP003–DP007)

ID级别触发条件
DP003Error策略 Key 重复
DP004Error实现与策略契约不匹配
DP006Info实现类型未用 [RegisterStrategy] 注册
DP007Error缺少无参构造函数

责任链(DP005、DP008–DP009、DP024)

ID级别触发条件
DP005Error[HandlerOrder] 顺序重复
DP008ErrorHandler 未实现管道契约
DP009ErrorHandler 缺少无参构造函数
DP024InfoHandler 未用 [HandlerOrder] 注册

Composite(DP010–DP015)

ID级别触发条件
DP010ErrorComposite 部件 Key 重复
DP011Error未知父 Key
DP012Error树结构存在环
DP013Error部件与节点契约不匹配
DP014Error部件缺少无参构造函数
DP015Error注册表持有者缺少 [CompositeBuildable]

Decorator(DP016–DP019)

ID级别触发条件
DP016ErrorDecorator 顺序重复
DP017ErrorDecorator 与契约不匹配
DP018Error未实现 IDecorator<T>
DP019ErrorDecorator 缺少无参构造函数

Factory Registry(DP020–DP023)

ID级别触发条件
DP020ErrorFactory Key 重复
DP021ErrorFactory 与产品契约不匹配
DP022ErrorFactory 缺少无参构造函数
DP023Info产品类型未用 [RegisterFactory] 注册

注册表 Key(DP025)

ID级别触发条件
DP025Info传入生成 Strategy / Factory 注册表查找的字符串字面量 key 不在已注册列表中

作用范围: IStrategyRegistry<,> / IFactoryRegistry<,>Get / TryGet / Create / TryCreate,且 key 参数为字符串字面量(非 {Contract}Keys 常量)。

消息: 包含契约类型与已注册 key 列表。

修复: 优先使用 {Contract}Keys.*。拼写接近已知 key 时,CorrectRegistryKey CodeFix 可替换为最近键。

另见 注册表 Key 命名约定

插件程序集(DP033)

ID级别触发条件
DP033Error同一契约的相同 strategy key多个被引用的供应商程序集中重复注册

作用范围: 宿主编译引用多个插件供应商程序集,且对同一契约使用了相同的 [RegisterStrategy] key。

消息: 包含 key、契约类型与冲突程序集名称。

修复: 各供应商使用不同 key,或每个契约维度只引用一个供应商。单程序集内重复 key 仍由 DP003(生成器)报告。

State 转换表(DP026–DP031)

ID级别触发条件
DP026Error(from state, trigger) 边重复
DP027Error[Transition] 的 state 非 enum 成员
DP028Errortrigger 非 enum 成员
DP029Error[StateMachine]Initial 非 state enum 成员
DP030Errorholder 不是 static partial class
DP031Infostate enum 成员从未作为 [Transition] 的 from(终态提示)

State 转换表

CodeFix

DesignPatterns.CodeFixesSkymly.DesignPatterns 元包分发(analyzers/dotnet/cs)。下列诊断支持 IDE 一键修复(需 C# Workspaces):

诊断CodeFix(摘要)
DP006添加 [RegisterStrategy("key", typeof(TContract))]
DP023添加 [RegisterFactory("key", typeof(TContract))]
DP024添加 [HandlerOrder(order, typeof(TContext))]
DP025将字面量替换为最近注册 key
DP001添加 partial
DP015添加 [CompositeBuildable]
DP004 / DP013 / DP017 / DP021补全契约实现
DP007 / DP009 / DP014 / DP019 / DP022添加无参构造函数

生成器 Error(如 DP003、DP020 重复 key)需改 attribute 或类型;不提供 CodeFix。

类别前缀:DesignPatterns

英文完整版:Diagnostics

基于 MIT 许可证发布。