嗨社区我在理解 dagger 2 以新方式添加子组件时遇到问题(在 dagger 2.7 中添加)。请参见下面的示例:
@Component(modules = {AppModule.class, MainActivityBinder.class})
@Singleton
interface AppComponent
{
inject(MyApplication _)
}
@Subcomponent(modules = ActivityModule.class)
interface ActivitySubcomponent
{
inject(MainActivity _)
@Subcomponent.Builder
interface Builder
{
@BindInstance
Builder activity(Activity activity)
ActivitySubcomponent build();
}
}
初始步骤:我AppComponent
的根组件是我的根组件,它提供AppModule
单例(改造、okhttp 等)。在ActivitySubcomponent
我提供ActivityModule
的依赖项中指定了该活动。现在必须将子组件添加到AppComponent
,因此我以新的方式创建了名为 的指定模块MainActivityBinder
,该模块具有注释 @Module.subcomponents 并指向绑定子组件,但我有第一个问题,该绑定模块的主体应该是什么?
@Module(subcomponents = ActivitySubcomponent.class)
public class MainActivityBinder
{
//what body of this class should be ??
}
我知道,这个想法是我可以绑定子组件或其构建器。第二个问题何时绑定构建器,何时绑定子组件?例如我ActivitySubcomponent
需要的活动上下文,所以我创建提供上下文的构建器ActivityModule
在这种情况下会更好地在MainActivityBinder
构建器中提供?第三个问题如何调用组件构建器以及如何获取应用组件的子组件?在标准子组件工厂中,我添加到AppComponent
返回子组件的方法中,我可以定义参数(例如给出活动上下文,如下所列)
@Component(modules = {AppModule.class})
@Singleton
interface AppComponent
{
ActivitySubcomponents newActivitySubcomponents(Activity activity);
inject(MyApplication _);
}
// in MainActivity
appComponent.newActivitySubcomponents(this).build().inject(this);
那么在新的子组件添加方法中实现了这种行为吗?