gpt4 book ai didi

java - 有没有办法忽略 Toothpick 中的绑定(bind)覆盖?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:20 27 4
gpt4 key购买 nike

假设我有作用域 S1,其中包含带有绑定(bind)的模块:

bind(Repository.class).to(RepositoryImpl.class).singletonInScope()

然后 S2 作用域以 S1 作为父级(S1 -> S2)打开,S2 定义相同的绑定(bind)(因为它是独立的并且对 S1 一无所知):

bind(Repository.class).to(RepositoryImpl.class).singletonInScope()

默认情况下,Toothpick 会覆盖父范围依赖项,因此 S2 将创建一个新的 RepositoryImpl

问题:有没有办法重用在 S1 中创建的绑定(bind)并忽略 S2 绑定(bind)?

此要求来自这样一个事实,即有时存在独立 应用程序组件,它们驻留在不同的范围内并且共享Repository 依赖项。他们彼此一无所知。这些组件也可以按不同的顺序创建,具体取决于场景和用例。

所以我想强加的唯一规则是:某些组件(不知 Prop 体是哪个组件)创建了 Repository,所有这些都是稍后在当前 中创建的子作用域 - 重用它。

最佳答案

要在代码中的任何位置尽早打开作用域,您只需使用

Scope s1Scope = Toothpick.openScope('s1-scope-name');

如果 S1 是 S2 的父作用域,您可以使用 getParentScope() 方法执行相同的操作

Scope s1Scope = s2Scope.getParentScope();

然后只从 S1 范围加载所需的单例

Repository s1Repository = s1Scope.getInstance(Repository.class);

如果你想在 S2 模块中做,你可以简单地做

bind(Repository.class).toProviderInstance(() -> Toothpick.openScope('s1-scope-name').getInstance(Repository.class));

关于java - 有没有办法忽略 Toothpick 中的绑定(bind)覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49412905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com