标签: toothpick-di

有没有办法忽略Toothpick中的绑定覆盖?

假设我有S1具有绑定模块的范围:

bind(Repository.class).to(RepositoryImpl.class).singletonInScope()
Run Code Online (Sandbox Code Playgroud)

然后使用parent()S2打开作用域并定义相同的绑定(因为它是独立的并且不知道):S1S1 -> S2S2S1

bind(Repository.class).to(RepositoryImpl.class).singletonInScope()
Run Code Online (Sandbox Code Playgroud)

默认情况下,Toothpick会覆盖父作用域依赖项,因此S2RepositoryImpl创建一个新的作用域.

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

此要求来自以下事实:有时存在独立的应用程序组件,这些组件驻留在不同的范围中并且共享该Repository依赖性.他们对彼此一无所知.这些组件也可以按不同的顺序创建,具体取决于方案和用例.

因此,我想要强加的唯一规则是:一些组件(确切地知道哪一个)创建Repository,所有这些组件都是在当前子范围中创建的- 重用它.

java android dependency-injection toothpick-di

9
推荐指数
1
解决办法
196
查看次数

相互依赖的牙签绑定模块

我正在尝试牙签DI库,但似乎错过了一些重要的事情。

在github上创建了以下测试项目,在该项目中,我尝试为我的理解问题制作一个最小的用例。

在这里,您将找到ApplicationModule,在这里我尝试将所需的一切注入“根”模块中。如您所见,我有两次scope.installModules(module)是因为我PlainPojo依赖Application实例。如果我不执行第一个installModule调用,则该作用域中没有应用程序实例。如注释中所述,我可以将应用程序实例作为参数传递,但是我认为我可以在使用DI时将其删除吗?

引起麻烦的第二个类是SimpleTest类。如果我没有inject()在构造函数中调用该方法,则不会注入PlainPojo成员。我也试图用第三次installModules()ApplicationModule绑定PlainPojo之后,但这样做没有帮助。

我是否错误地认为@Injecton成员足以在范围内可用时自动注入它,并且绑定的顺序足以使以前的绑定可用而无需在两者之间进行安装(如in中完成ApplicationModule)?

如果我能提供更多其他信息使我的问题易于理解,请发表评论。

提前致谢!

java android dependency-injection toothpick-di

5
推荐指数
1
解决办法
399
查看次数