2017-09-30 3 views
1

Kotlin과 Dagger 2를 사용할 때이 문제가 있습니다.대거는 Kotlin을 주입 할 수 없습니다.

이 내 모듈 클래스입니다

". 인터페이스는 @ Provides- 또는 @ - 주석 생산 방법없이 제공 할 수 없다"

@Module 
class MenuActivityModule(@NonNull private val menuActivity: MenuActivity) { 

    @Provides 
    @MenuActivityScope 
    fun provideGameScreenDimensions(application: Application) = 
      GameScreenDimension(application.resources) 

    @Provides 
    @MenuActivityScope 
    fun provideAudio() = 
      AndroidAudio(menuActivity) 

    @Provides 
    @MenuActivityScope 
    fun providePowerManager() = 
      menuActivity.getSystemService(Context.POWER_SERVICE) as PowerManager 

    @Provides 
    @MenuActivityScope 
    fun provideWakeLock(@NonNull powerManager: PowerManager) = 
     powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Preferences.APPLICATION_TAG) 
} 

This is a part of my Activity class, where I inject some variables with Dagger: 

class MenuActivity : BaseActivity { 

    @Inject 
    lateinit var myAudio: Audio 
    @Inject 
    lateinit var wakeLock: PowerManager.WakeLock 
    @Inject 
    lateinit var apiService : ApiService 
    @Inject 
    lateinit var sharedPref : SharedPreferences 
    @Inject 
    lateinit var gameDimension : GameScreenDimension 

    init { 
     DaggerMenuActivityComponent.builder() 
       .menuActivityModule(MenuActivityModule(this)) 
       .build() 
       .inject(this) 
    } 
    //more code 
} 

Audio.kt 인터페이스이고 대거 투입하는 문제가 그것은 활동 모듈 내에서 오디오 인터페이스를 구현하는 안드로이드 인스턴스를 반환 오전. 나는 여기에 문제가 무엇인지 모르겠다. 자바에서 나는 인터페이스의 많은 시간 주입 및 전에이 문제가 없었어요. 누군가가 수 있습니다. 내가 너무 행복해 지도록 도와주세요. 보다 ks!

답변

4

귀하의 문제에 대한 해결책은 매우 간단하고 불행히도 그렇게 분명하지 않다고 생각합니다.

코 틀린 유형을 필요로하지 않기 때문에

, 당신은 쉽게 같은 것을 쓸 수를 돌려주는 방법을 지정합니다 :

@Provides 
@MenuActivityScope 
fun provideAudio() = 
     AndroidAudio(menuActivity) 

을 그리고 컴파일러는 불평하지 않을 것이다, 그러나이 경우에는 단검이 AndroidAudio 객체를 제공 할 것입니다 주입 용. 당신의 활동에서 당신은 주사를위한 오디오 객체를 찾고 있습니다. 따라서이 코드를 다음과 같이 변경하면

@Provides 
@MenuActivityScope 
fun provideAudio(): Audio = 
     AndroidAudio(menuActivity) 

모두가 ОК이어야합니다. 무언가가 작동하지 않으면 시도해보십시오. 감사합니다. .

BTW : 나는 코 틀린와 단검을 사용하는 경우 일반적으로 그 거 주입 된 변수의 유형 또는 당신이 당신의 단검에 사용하려는 변수의 유형이 될 때문에 나는, 반환 값의 유형을 지정의 결론 기준 치수.

관련 문제