假设您有这样的课程:
@SomeScope
class ServiceScopeManager {
@Inject
Dependency1 dependency1;
@Inject
Dependency2 dependency2;
@Inject
ServiceScopeManager(){
}
@Inject
void init(){
//do something really important with dependencies
}
}
@Provides
方法
正如您所看到的那样,它是高级类,例如,它可以侦听系统中的某些事件并执行其依赖项的释放。
问题是这个类不会被创建,因为没有任何东西依赖它 我能以某种方式告诉匕首始终创建依赖于组件创建(例如),而不是默认需要时吗?或者可能以任何其他方式达到要求。
答案 0 :(得分:7)
不,Dagger没有提供任何等效的Guice requestInjection
或requestStaticInjection
,如果你没有提到你的对象,Dagger甚至不会为它或它的依赖项生成Factory 。这通常是一件好事,因为它允许您拥有一个经过严格修剪的图形,而不是使用@Inject注释为类路径上的每个类生成代码生成工厂实现。
你要求Dagger在这里做太多:它是一个依赖注入框架,不会像这样管理组件生命周期。相反,您必须在应用程序逻辑中执行此初始化,可以通过创建FooComponentInitializer或FooComponentStartup类来与FooComponent相邻并通过它们提供。这会将您的代码缩减为:
FooComponent fooComponent = DaggerFooComponent.create();
fooComponent.getInitializer().initialize();
......这对我来说似乎很简单。