在我的应用程序中,我正在使用Dagger
,并且一些活动正在使用它,我想在BaseActivity
上实现注入,而不是在我想使用{{1}的所有活动上实现注入}例如:
这是我的LoginActivity:
Dagger
在此活动中,我使用class LoginActivity : AppCompatActivity(){
@Inject
internal lateinit var personsRemoteRepository: PersonsRemoteRepository
@Inject
internal var restClient: RestClient? = null
private var component: ApplicationComponent? = null
private var mBinding: LoginActivityBinding? = null
private var viewModel: LoginMethodsViewModel? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
component = DaggerApplicationComponent.builder()
.projectApplicationComponent(CoreApplication.getComponent())
.build()
component?.inject(this)
mBinding = DataBindingUtil.setContentView(this, R.layout.login_activity)
personsRemoteRepository = PersonsRemoteRepository(restClient)
viewModel = LoginMethodsViewModel(personsRemoteRepository, this, mBinding)
mBinding!!.viewModel = viewModel
}
}
进行注入,现在我想拥有DaggerApplicationComponent
这样的课程:
BaseActivity
,当我扩展此类而不是在open class BaseActivity : AppCompatActivity() {
protected var component: ApplicationComponent? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
component = DaggerApplicationComponent.builder()
.projectApplicationComponent(CoreApplication.getComponent())
.build()
component?.inject(this)
}
}
上扩展AppCompatActivity
时,我可以使用注入,例如:
LoginActivity
答案 0 :(得分:1)
dagger-java不支持此功能。但是,如果将它与dagger-android一起使用,并且将活动范围与DaggerActivity一起使用,它将按您希望的那样工作。还必须添加其他一些内容。就像重构应用程序类以使用DaggerApplication对其进行扩展,并在您的情况下添加重构ApplicationComponent一样。请浏览dagger-android文档,或者浏览我写过的文章。
https://medium.com/@ninad458/exploring-android-dagger-9c325c6acfe3
仅需满足先决条件即可。