使用Dagger-android将活动暴露/提供/注入图表

Kav*_*avi 5 android dagger dagger-2

以前使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

可以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);
    }
Run Code Online (Sandbox Code Playgroud)

我可以提供Activity以下内容:

@ActivityScope
public class PermissionsHelper {

    private final Activity activity;

    @Inject
    PermissionsHelper(Activity activity) {
        this.activity = activity;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在迁移到新dagger-android设置后(以此为指南),我不再可以轻松访问Activity实例,而不必为每个注入的活动创建单独的模块,然后将其实例绑定到Activity对象,如下所示:

@Module
abstract class ActivityBindingModule {

    @ActivityScope
    @ContributesAndroidInjector(modules = arrayOf(SomeActivityModule::class))
    abstract fun someActivity(): SomeActivity
}
Run Code Online (Sandbox Code Playgroud)

...

@Module
abstract class SomeActivityModule {

    /**
     * Expose the activity to the graph.
     */
    @Binds
    abstract fun bindActivity(someActivity: SomeActivity): Activity
}
Run Code Online (Sandbox Code Playgroud)

在使用新dagger-android内容时,对于要让其种子实例暴露于图形的每个Activity,是否有任何方法可以避免创建模块并将其绑定的最后一步?