模块依赖于匕首中的另一个模块
2022-09-04 05:24:29
我正在尝试使用 Dagger 在我正在构建的应用程序上进行依赖注入,当我有一个包的模块时,根据注入器提供的值(可能由另一个模块提供),在构建正确的 DAG 时遇到问题。
如果我有一个用于某些可配置变量的简单模块(例如,我可能想要将其换成测试环境)
@Module(
injects = DependentModule.class,
)
public class ConfigModule {
@Provides @Named("ConfigOption") String provideConfigOption() {
return "This Module's configurable option!";
}
}
另一个模块依赖于它,例如
@Module(
injects = {
TopLevelClass.class
}
)
public class DependentModule {
@Inject @Named("ConfigOption") String configOption;
public DependentModule() {
ObjectGraph.create(this).inject(this);
doSomethingWithConfig(configOption);
}
@Provides @Singleton UsefulValue provideUsefulValue() {
// Whatever this module needs to do...
}
}
我尝试在构造函数中引导注入的行失败,它抱怨我没有在正确的模块中指定显式行。injects
通过反复试验,我看到如果我添加一行,这种情况就会消失,但这让我感到语义错误,因为a)我将要创建的DAG现在将包括两个模块的值,而不仅仅是一个,以及b)它首先违背了DI的目的/灵活性,即链接特定模块,而不是简单地让Dagger注入适当的值。@Module
include = ConfigModule.class
我假设我不应该创建一个对象图,只是为了注入它?但是,我遇到了不链接特定模块的问题...this
简洁:
- 将值注入一个模块的“正确”方法是什么,这些模块可能来自其他模块?在这里,我使用的是场注入,但我的构造函数注入实验也导致了很多失败。
- 相关地,何时适合使用 vs. ?
addsTo
includes
谢谢:)