【发布时间】:2017-11-23 06:38:25
【问题描述】:
我一直在努力将 Dagger 单例注入到 android 组件(服务)和 ViewModel 中。
请参阅此question 作为参考。 我还没有找到一个很好的例子,说明如何使用 same 对象简单地在 Service 中注入字段和在 ViewModel 中注入字段。如果有一个简单的解决方案,我很乐意看到它。
我发现了一些问题,here 和 here,它们的答案沿着实现 ViewModel.Factory 的路径,然后通过 create 方法将依赖项注入到具有依赖项的 ViewModel 子类的构造函数中。
我的问题是。将对象注入到 Activity(和服务)中,然后在检索对象后使用 setter 将对象注入到 ViewModel 中是否存在任何严重问题?例如。
class MainActivity : AppCompatActivity() {
@Inject lateinit var messageBus: MessageBus // "thing" I want in the ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
// get the ViewModel
val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
// inject the "thing" via a setter
viewModel.messageBus = messageBus
}
}
在视图MainViewModel 类中,我可以检查该值是否已设置,并且仅在它为空时设置它。
class MainViewModel: ViewModel() {
var messageBus: MessageBus? = null
set(value) {
if (field == null) {
field = value
// do initialization stuff
}
}
}
【问题讨论】:
标签: android dependency-injection kotlin dagger-2