如何使用dagger.android将活动注入另一个类中? [英] How to inject activity into another class using dagger.android?

查看:91
本文介绍了如何使用dagger.android将活动注入另一个类中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用新的dagger.android方法注入活动,但是我想知道如果要将 Activity 注入到类中怎么办?也许 Navigator 类需要当前活动:

I'm using the new dagger.android method to inject activities, but I wonder what to do if you want to inject Activity to a class? Maybe a Navigator class which needs the current activity:

package com.abydos.messenger.ui

import android.app.Activity
import com.abydos.messenger.ui.register.RegisterActivity
import org.jetbrains.anko.startActivity
import javax.inject.Inject

class Navigator @Inject constructor(private val activity: Activity) {
    fun register() {
        activity.startActivity<RegisterActivity>()
    }

    ...
}

ActivityBindingModule.kt

package com.abydos.messenger.di

import com.abydos.messenger.ui.register.RegisterActivity
import dagger.Module
import dagger.android.ContributesAndroidInjector

@Module
abstract class ActivityBindingModule {
    @ContributesAndroidInjector
    abstract fun contributeRegisterActivity(): RegisterActivity

    ...
}

也许对于每个活动都可以使用类似的方法?

Maybe something like this for each activity might work?

@Binds abstract fun bindActivity(yourActivity: YourActivity): Activity

但是我不喜欢必须为所有活动编写代码的想法,有没有更好的方法?

But I don't like the idea of having to write this for all activities, is there a better way?

推荐答案

不幸的是,匕首-android-processor不会自动创建此绑定。

Unfortunately dagger-android-processor don't create this binding automatically.

您还需要一个模块:

@Module
interface RegisterModule {
    @Binds
    fun bindActivity(activity: RegisterActivity): Activity
}

并在您的ActivityBindingModule中:

And in your ActivityBindingModule:

@ContributesAndroidInjector(modules = arrayOf(RegisterModule::class))
abstract fun contributeRegisterActivity(): RegisterActivity

这篇关于如何使用dagger.android将活动注入另一个类中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆