android - 在 Dagger 2.15 中,我是否需要在每个 Activity 上添加注入(inject)行?

标签 android dagger-2 dagger

我在 Kotlin 中使用 Dagger 2.15。我是否需要在每个 Activity 上添加注入(inject)行? dagger 官方文档是否更新为使用最新版本?

AndroidInjection.inject(this)

最佳答案

Should I need to add inject line on every Activity?

,如果您从DaggerActivityDaggerAppCompatActivity 扩展您的 Activity ,则不再需要它(如果您使用支持库).

DaggerActivity正如我们在源代码中看到的那样,已经在调用 AndroidInjection.inject(this):

public abstract class DaggerActivity extends Activity implements HasFragmentInjector {
    //...
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        AndroidInjection.inject(this);
        super.onCreate(savedInstanceState);
    }
    //...
}

Is it dagger official document updated for using latest version?

在今天的日期, Dagger documentation Android 版更新但...

我用 Kotlin 编写了一个示例,说明如何在 Dagger 2.15 中连接所有内容:

应用类扩展自 DaggerApplication

class App : DaggerApplication() {

    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder().application(this).build()
    }
}

注入(inject) MainPresenter 的简单 Activity

class MainActivity : DaggerActivity() {

    @Inject lateinit var mPresenter: MainPresenter

    //... and the mPresenter is available without anything else
}

MainPresenterMainModule 提供

@Module
class MainModule {

    @Provides
    fun provideMainPresenter(context: Context): MainPresenter {
        return MainPresenterImpl(context)
    }
}

BuildersModule 是绑定(bind) MainActivity 和其他“子组件”所必需的

@Module
abstract class BuildersModule {

    @ContributesAndroidInjector(modules = [MainModule::class])
    abstract fun bindMainActivity(): MainActivity
}

AppComponent 现在包括我们的 BuildersModule 和一个名为 AndroidInjectionModuleAndroidSupportInjectionModule 的新 Dagger 模块(如果您使用支持库)。

@Singleton
@Component(modules = [
    AndroidInjectionModule::class,
    BuildersModule::class
])
interface AppComponent : AndroidInjector<DaggerApplication> {

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun application(application: Application): Builder

        fun build(): AppComponent
    }
}

请注意,我们不再在此接口(interface)中定义所有 inject() 函数。

Gradle 依赖项:

// dagger
implementation "com.google.dagger:dagger:2.15"
kapt "com.google.dagger:dagger-compiler:2.15"
// dagger android
implementation "com.google.dagger:dagger-android:2.15"
implementation 'com.google.dagger:dagger-android-support:2.15' // if you use the support libraries
kapt "com.google.dagger:dagger-android-processor:2.15"

关于android - 在 Dagger 2.15 中,我是否需要在每个 Activity 上添加注入(inject)行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348638/

相关文章:

android - 将混淆器与 Dagger 1.2.2 一起使用

android - 带有 webview 项目的 ListView 适合新闻应用程序吗?

android - Dagger : Can't provide Map<java. lang.Class<? extends android.arch.lifecycle.ViewModel> 没有 @Provides-annotated 方法

java - Dagger 组件有冲突的作用域

android - Dagger 2.10 - 提供 AndroidInjector 注释

java - 如何使用 Dagger 模块和 Robolectric 测试 Activity onResume() 上的模拟交互?

android - Foursquare android 顶部横幅动画

android - 使用Appium对Android应用进行黑测

android - 具有未决 Intent 的通知操作不适用于 JellyBean+

java - 子组件中的 Dagger 2 模块覆盖