我现在正在研究 Dagger2。我通过看几个例子来学习。但是有些部分不能正常工作,看看例子。我知道Dagger2的结构应该按照应用-> Activity ->用户组件的顺序来定义和实现。但是,执行此操作时发生错误。消息是 java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector代码很长,但我希望有人能帮助我。我很绝望。

应用组件

@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 
    } 
} 

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

Activity 范围
@Scope 
annotation class ActivityScope 

Activity 绑定(bind)模块
@Module 
abstract class ActivityBindingModule { 
 
    @ContributesAndroidInjector(modules = [MainModule::class]) 
    abstract fun mainActivity(): MainActivity 
 
} 
 

主模块
@Module 
class MainModule { 
    @ActivityScope 
    @Provides 
    fun util() : Utils = Utils() 
 
} 

应用模块
@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 
 
} 

主要 Activity
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 
    } 
} 

请您参考如下方法:

使应用程序类实现 HasActivityInjector

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!