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

Bel*_*loo 2 java android dagger-2

假设你有这样的课程:

@SomeScope
class ServiceScopeManager {

    @Inject
    Dependency1 dependency1;
    @Inject
    Dependency2 dependency2;

    @Inject
    ServiceScopeManager(){
    }

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

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

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

Jef*_*ica 7

不,匕首不提供Guice的任何相等于requestInjection或者requestStaticInjection,如果你没有提到你的对象,匕首甚至不会产生厂为它或它的依赖关系.这通常是一件好事,因为它允许您拥有一个经过严格修剪的图形,而不是使用@Inject注释为类路径上的每个类生成代码生成工厂实现.

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

FooComponent fooComponent = DaggerFooComponent.create();
fooComponent.getInitializer().initialize();
Run Code Online (Sandbox Code Playgroud)

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