【问题标题】:Dagger 2 Singleton Component with RunTime SubComponent带有运行时子组件的 Dagger 2 单例组件
【发布时间】:2015-10-19 18:40:35
【问题描述】:

我正在构建一个使用 Dagger 2 的应用程序。

所以,我的应用程序组件如下所示:

@Singleton
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {

    // Exported for child-components.
    Application application ();

    final class Initializer {
        public static ApplicationComponent init (Application app) {
            return DaggerApplicationComponent.builder()
                    .applicationModule(new ApplicationModule(app)).build();
        }

        private Initializer () {
        } // No instances.
    }


    ConnectorComponent plus(ConnectorModule module);

    ... injections

}

这是在@Singleton 范围内,因此它在应用生命周期内是唯一的。
然后我有另一个组件,它应该能够使用上述组件提供的所有依赖项,但为它的依赖项提供@PerActivity 范围:

@Scope
@Retention(RUNTIME)
public @interface PerActivity {}

看起来像这样

@PerActivity
@Subcomponent(modules = ConnectorModule.class)
public interface ConnectorComponent  {

    ... injections
}

问题是。如何确保 @Singleton 提供的所有内容都将作为依赖项上的 Singletons 传递给 ConnectorModule?另一件事,我怎样才能确保 ApplicationComponent 中的方法plus 总是会添加一个我想要的新模块(@PerActivity)?

最后,任何人都可以想出一种策略来在所有活动中使用它(这对于@PerAcitivity 范围使用是有意义的)并且不必每次都使用新的 ConnectorModule 调用 plus

【问题讨论】:

    标签: java android dependency-injection dagger-2


    【解决方案1】:

    如何确保 @Singleton 提供的所有内容都将作为依赖项上的 Singleton 传递给 ConnectorModule?

    Dagger 将确保 ApplicationModule 中的任何 @Singleton 注释类型或 @Provides 方法在您构建的 DaggerApplicationComponent 的生命周期内仅提供一次,即使 ConnectorComponent 中的绑定使用它也是如此。

    如何确保 ApplicationComponent 中的方法 plus 始终添加我想要的新模块(@PerActivity)?

    我不确定你在这里问什么。当您调用plus 时,您必须自己传递ConnectorModule 的实例。

    任何人都可以想出一种策略来在所有活动中使用它(这对于@PerAcitivity 范围使用是有意义的)并且不必每次都使用新的 ConnectorModule 调用 plus?

    ConnectorModule 是否在其构造函数中接受参数?如果没有,您可以将其排除在 plus 方法的参数之外,Dagger 将为您构造一个。

    但是,您仍然必须调用plus 方法才能获取活动的子组件实例。这就是使@PerActivity 作用域工作的方式:有一个ConnectorComponent 的实例,并且该作用域与该实例的生命周期相关联。

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多