以前使用Dagger 2.10时,我有一个非常典型的设置ActivitySubcomponent
有一个ActivityModule
,它将Activity
实例提供/暴露给图表以注入其他类需要它。
这样ActivityModule
:
@Module
public class ActivityModule {
private final Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
/**
* Expose the activity to the graph.
*/
@Provides @ActivityScope
Activity activity() {
return activity;
}
}
通过在注入之前创建一个新的Activity
来获取ActivityModule
实例:
@Inject PermissionsHelper permissionsHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(getApplicationContext()))
.plus(new ActivityModule(this))
.inject(this);
}
我可以将Activity
提供给这样的内容:
@ActivityScope
public class PermissionsHelper {
private final Activity activity;
@Inject
PermissionsHelper(Activity activity) {
this.activity = activity;
}
}
但是,在迁移到新的dagger-android
设置后(使用this作为指南),我无法轻松访问Activity
实例,而无需为每个注入创建单独的模块活动然后将它的实例绑定到Activity
对象,如下所示:
@Module
abstract class ActivityBindingModule {
@ActivityScope
@ContributesAndroidInjector(modules = arrayOf(SomeActivityModule::class))
abstract fun someActivity(): SomeActivity
}
...
@Module
abstract class SomeActivityModule {
/**
* Expose the activity to the graph.
*/
@Binds
abstract fun bindActivity(someActivity: SomeActivity): Activity
}
在使用新的dagger-android
时,有没有办法避免为每个我希望其种子实例暴露给图形的Activity创建模块并绑定它的最后一步?