问题
inject 先应用调用方 opts,再执行 opt = dix.option.Merge(opt)(dixinternal/dix.go)。Options.Merge(dixinternal/option.go)在容器侧 ProviderTimeout > 0、SlowProviderThreshold > 0 或 AllowValuesNull == true(均为默认)时,用容器值覆盖调用方设置。
影响
例如 Inject(di, target, WithProviderTimeout(time.Second)) 无法缩短/关闭容器默认的 15s 超时;调用级 Option 对用户几乎是死代码。文档却暗示这些 Option 可用于注入调用。
建议
- 改为调用方优先,或用 pointer/
set bit 区分「未设置」与「显式设为 0」
- 补充测试:调用级可覆盖容器超时(含
0 关闭)
问题
inject先应用调用方opts,再执行opt = dix.option.Merge(opt)(dixinternal/dix.go)。Options.Merge(dixinternal/option.go)在容器侧ProviderTimeout > 0、SlowProviderThreshold > 0或AllowValuesNull == true(均为默认)时,用容器值覆盖调用方设置。影响
例如
Inject(di, target, WithProviderTimeout(time.Second))无法缩短/关闭容器默认的 15s 超时;调用级 Option 对用户几乎是死代码。文档却暗示这些 Option 可用于注入调用。建议
setbit 区分「未设置」与「显式设为 0」0关闭)