大家好,我在理解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
的根组件,它提供单例(如retrofit、okhttp等)给AppModule
。在ActivitySubcomponent
中,我提供了ActivityModule
,其中包含特定于该活动的依赖项。现在,子组件必须添加到AppComponent
中,因此我创建了一个指定模块MainActivityBinder
,它具有注释@ Module.subcomponents并指向绑定子组件的点,但我遇到了第一个问题:该绑定模块的主体应该是什么?
@Module(subcomponents = ActivitySubcomponent.class)
public class MainActivityBinder
{
//what body of this class should be ??
}
我知道,这个想法是我可以绑定子组件或它们的构建器。第二个问题是什么时候绑定构建器,什么时候绑定子组件?例如,我的ActivitySubcomponent
需要活动上下文,所以我创建了一个构建器,在这种情况下,最好在MainActivityBinder
中提供一个构建器吗?第三个问题是如何调用组件构建器以及如何获取应用程序组件的子组件?在标准子组件工厂中,我添加了一个方法到AppComponent
,返回子组件,我可以定义参数(例如给出活动上下文,如下所示)
@Component(modules = {AppModule.class})
@Singleton
interface AppComponent
{
ActivitySubcomponents newActivitySubcomponents(Activity activity);
inject(MyApplication _);
}
// in MainActivity
appComponent.newActivitySubcomponents(this).build().inject(this);
所以在新的子组件中添加方法来实现这种行为?