2017-05-30 8 views
2

私は新しいdagger.androidメソッドを使用してアクティビティを注入していますが、Activityをクラスに注入するにはどうすればいいですか?たぶん、現在の活動を必要とNavigatorクラス:dagger.androidを使って別のクラスにアクティビティを注入するにはどうすればいいですか?

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 

    ... 
} 

にたぶん、それぞれの活動のためにこのような何かがうまくいくかもしれませんか?

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

しかし、私はすべての活動のためにこれを記述することのアイデアを好きではない、より良い方法はありますか?

+0

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

そして、あなたのActivityBindingModuleでは? – finki

+0

あなたは答えを見つけたことがありますか? – AJay

答えて

0

残念ながら、dagger-android-processorはこのバインディングを自動的に作成しません。

あなたは1つの以上のモジュールが必要です。あなたが別のものに `Activity`を注入したくない理由の質問は、ある

@ContributesAndroidInjector(modules = arrayOf(RegisterModule::class)) 
abstract fun contributeRegisterActivity(): RegisterActivity 
関連する問題