Starting Dagger2,如何构造结构?

问题描述 投票:1回答:1

我正在学习Dagger2。我正在研究几个例子。但是,请看示例,其中有些部分无法正常工作。我知道Dagger2的结构应按照应用程序->活动->用户组件的顺序进行定义和实现。但是,遵循此步骤时发生错误。消息是java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector代码很长,但是我希望有人能帮助我。我非常绝望。

AppComponent

@Singleton 
@Component(modules = [AndroidSupportInjectionModule::class,
                      ActivityBindingModule::class,
                      ApplicationModule::class]) 
interface AppComponent : AndroidInjector<BaseApplication> {

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): AppComponent
    }
}

BaseApplication

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

ActivityScope

@Scope
annotation class ActivityScope

ActivityBindingModule

@Module
abstract class ActivityBindingModule {

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

}

MainModule

@Module
class MainModule {
    @ActivityScope
    @Provides
    fun util() : Utils = Utils()

}

ApplicationModule

@Module
class ApplicationModule {
    @Provides
    fun providesContext(application: Application): Context {
        return application
    }
}

实用程序

class Utils {
    @Inject constructor(){
    }
    fun add(a :Int, b:Int):Int= a+b
    fun sub(a :Int, b:Int):Int= a-b
    fun div(a :Int, b:Int):Int= a/b
    fun mul(a :Int, b:Int):Int= a*b

}

MainActivity

class MainActivity : DaggerAppCompatActivity(), HasActivityInjector {

    lateinit var utils : Utils

    @Inject
    lateinit var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var aa = utils.add(10,20)

        Log.d("TAG",""+aa)

    }

    override fun activityInjector(): AndroidInjector<Activity> {
        return activityDispatchingAndroidInjector
    }
}
android kotlin dagger-2
1个回答
0
投票

使应用程序类实现HasActivityInjector

类UserApplication扩展了应用程序实现的HasActivityInjector {}

© www.soinside.com 2019 - 2024. All rights reserved.