gpt4 book ai didi

java - 始终使用 dagger 2 初始化依赖关系,无需任何注入(inject)或提供

转载 作者:太空狗 更新时间:2023-10-29 15:59:13 25 4
gpt4 key购买 nike

假设你有这样的类:

@SomeScope
class ServiceScopeManager {

@Inject
Dependency1 dependency1;
@Inject
Dependency2 dependency2;

@Inject
ServiceScopeManager(){
}

@Inject
void init(){
//do something really important with dependencies
}
}
  • 这个类没有被注入(inject)到任何其他类
  • 这个类没有提供给模块中的任何@Provides方法

如您所见,它是高级类,例如,它可能会监听系统中的某些事件并释放其依赖项。

问题是这个类永远不会被创建,因为没有任何东西依赖于它。
我能以某种方式告诉 Dagger 始终在组件创建时(例如)创建依赖项,而不是在默认情况下需要时创建依赖项吗?或者可能用任何其他方式来达到要求。

最佳答案

不,Dagger 不提供任何与 Guice 的 requestInjectionrequestStaticInjection 等效的功能,如果您不引用您的对象,Dagger 甚至不会生成它或其依赖项的工厂。这通常是一件好事,因为它允许您拥有一个紧密修剪的图形,而不是使用 @Inject 注释为类路径上的每个类生成代码工厂实现。

你在这里要求 Dagger 做的太多了:它是一个依赖注入(inject)框架,不会像那样管理组件生命周期。相反,您必须在应用程序逻辑中执行此初始化,可能通过创建与 FooComponent 相邻并可通过 FooComponent 使用的 FooComponentInitializer 或 FooComponentStartup 类。这将您的代码减少为:

FooComponent fooComponent = DaggerFooComponent.create();
fooComponent.getInitializer().initialize();

...这对我来说似乎很简单。

关于java - 始终使用 dagger 2 初始化依赖关系,无需任何注入(inject)或提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43637088/

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