簡體   English   中英

Dagger 2:沒有任何提供者的現場注入

[英]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

https://stackoverflow.com/a/32081400/12204620

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM