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

时间:2017-04-26 14:28:14

标签: java android dagger-2

假设您有这样的课程:

@SomeScope
class ServiceScopeManager {

    @Inject
    Dependency1 dependency1;
    @Inject
    Dependency2 dependency2;

    @Inject
    ServiceScopeManager(){
    }

    @Inject
    void init(){
        //do something really important with dependencies
    }
}
  • 此类不会注入任何其他类
  • 此类未提供给模块
  • 中的任何@Provides方法

正如您所看到的那样,它是高级类,例如,它可以侦听系统中的某些事件并执行其依赖项的释放。

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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