Skip to content

bug: Options.Merge 使 Inject 调用级 Option 基本无效 #39

Description

@kooksee

问题

inject 先应用调用方 opts,再执行 opt = dix.option.Merge(opt)dixinternal/dix.go)。Options.Mergedixinternal/option.go)在容器侧 ProviderTimeout > 0SlowProviderThreshold > 0AllowValuesNull == true(均为默认)时,用容器值覆盖调用方设置。

影响

例如 Inject(di, target, WithProviderTimeout(time.Second)) 无法缩短/关闭容器默认的 15s 超时;调用级 Option 对用户几乎是死代码。文档却暗示这些 Option 可用于注入调用。

建议

  • 改为调用方优先,或用 pointer/set bit 区分「未设置」与「显式设为 0」
  • 补充测试:调用级可覆盖容器超时(含 0 关闭)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions