使用dagger-android暴露/提供/注入活动到图形

时间:2017-10-22 15:24:16

标签: android dagger-2 dagger

以前使用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创建模块并绑定它的最后一步?

0 个答案:

没有答案