问题
handleProvide 对不支持的 output kind 只 logger.Warn 并返回 nil(dixinternal/dix.go),注册表面成功。providerInputType.Validate() 存在但注册路径未调用。不支持的 input 在 parseInputType 中被丢弃,可能导致后续 fn.Call 参数个数不匹配而 panic。
影响
TryProvide/Provide 给人「注册成功」的假象
- 失败推迟到 Inject,错误更难定位
- 极端情况下运行时 panic
建议
- 在
Provide/TryProvide 对不支持的 in/out 直接返回 error
- 注册时调用
Validate(),拒绝「声明了参数但解析为空」的情况
- 将现有「Inject 时才失败」的测试前移到 Provide 阶段
问题
handleProvide对不支持的 output kind 只logger.Warn并返回nil(dixinternal/dix.go),注册表面成功。providerInputType.Validate()存在但注册路径未调用。不支持的 input 在parseInputType中被丢弃,可能导致后续fn.Call参数个数不匹配而 panic。影响
TryProvide/Provide给人「注册成功」的假象建议
Provide/TryProvide对不支持的 in/out 直接返回 errorValidate(),拒绝「声明了参数但解析为空」的情况