[英]Dagger 2: Field Injection without any provider
在處理一個使用 Dagger 2 進行 DI 的項目時,我嘗試創建一個ViewModel
並現場注入它,即使沒有從任何模塊創建任何提供程序。 對我來說最大的困惑時刻,因為據我所知,Dagger 在使用@Inject
之前需要知道如何構造一些東西。
這是示例 Activity 和 ViewModel class
class MainActivity : DaggerAppCompatActivity(){
@Inject
lateinit var viewModel: MainViewModel
//accessing viewModel methods
}
class MainViewModel @Inject constructor(val sharedPref: SharedPrefManager) : ViewModel() {
//some public methods...
}
這里sharedPref
是在模塊內使用@Provides
提供的,所以毫無疑問,但是這段代碼如何與MainViewModel
一起工作並完美運行? 根本沒有實例化,沒有使用 ViewModelProvider 和 Factory。 有人可以向我解釋幕后發生了什么嗎?
注意:我也可以刪除構造函數中的參數並最終沒有任何問題(我猜)。
class MainViewModel @Inject constructor(): ViewModel() {
//some public methods...
}
我猜這個 ViewModel 不知道生命周期,因為它沒有lifecycleOwner
看來我終於找到了答案,這是一個非常重要的部分。 但我仍然想知道 Dagger 是如何知道如何創建一個 ViewModel 的,它太具體並且是 Android 框架的一部分,沒有提供者。
https://www.vogella.com/tutorials/Dagger/article.html#defining-dependencies-object-consumers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.