我正在构建一个使用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提供的所有内容都作为依赖项上的单例传递给ConnectorModule?另外,如何确保ApplicationComponent中的方法ApplicationComponent总是添加我想要的新模块( @PerActivity)?
最后,谁能想到一种策略,在所有活动中都使用这个(这在@PerAcitivity作用域中是有意义的),而不必每次使用新的plus调用ConnectorModule?
发布于 2015-10-20 16:13:04
如何确保@Singleton提供的所有内容都作为依赖项上的单例传递给ConnectorModule?
Dagger将确保任何@Singleton-annotated类型或ApplicationModule中的@Provides方法在构建的DaggerApplicationComponent生命周期内只提供一次,即使ConnectorComponent中的绑定使用它。
如何确保ApplicationComponent中的方法加号总是添加我想要的新模块( @PerActivity)?
我不知道你在问什么。当您调用plus时,您必须亲自传递ConnectorModule的一个实例。
有人能想到一种策略来在所有的活动中使用这个(这与@PerAcitivity作用域一起使用是有意义的),而不必每次使用一个新的ConnectorModule调用plus?
ConnectorModule是否在其构造函数中使用参数?如果不是,您可以将它排除在plus方法的参数之外,而Dagger将为您构造一个参数。
但是,仍然必须调用plus方法才能获得活动的子组件的实例。这就是如何使@PerActivity作用域工作:有一个ConnectorComponent实例,该范围与该实例的生存期相关联。
https://stackoverflow.com/questions/33221584
复制相似问题