如何使用 sharedview 模型 koin 注入具有作用域的视图模型 android

How to inject view model with scope using sharedview model koin android

需要澄清一件事,现在我正在处理一个流程,其中我有两个视图模型,一个依赖于另一个视图模型,为了处理这件事,我尝试在我的 Base 中注入两个视图模型 Activity 我用这种方法遇到的问题。每次我尝试访问这些视图模型时,Base Activity 都会返回新实例,有什么方法可以管理该视图模型的范围,这样我就可以轻松访问它的属性而无需添加额外的 Api来电。

模块Class

    val homeModule= module {
      
        single { HomeDispatcher(get(), get()) }
        viewModel { HomeViewModel (get()) }
    }

**Main Activity**

    import org.koin.android.viewmodel.ext.android.viewModel

        class NotificationActivity : BaseActivity() {
        
           private val viewModel: HomeViewModel by inject()
        
           private val viewModel: HomeViewModel by viewModel()
    }
    
    
    
        class NotificationsFragment : BaseFragment() {
        
           private val viewModel: HomeViewModel by viewModels({requireActivity()})
    
           private val viewModelx: HomeViewModel by activityViewModels
    
    
        
        }

> by using viewModels({requireActivity()}) getting instance not found.

Hilt 更新

   implementation "androidx.activity:activity-ktx:1.2.0"

   private val viewModelx: HomeViewModel by viewModels

上面提到的库有视图模型,可以直接懒惰地注入视图模型。

您需要在 koin 模块中提供上下文

val appModule = module {
single { HomeViewModel (get()) } // it will get the context from Application Context
   
}

在activity你想用就用

private val viewModel: HomeViewModel by inject()

它将return您的viewModel

的单个实例
import org.koin.android.viewmodel.ext.android.viewModel
import org.koin.android.viewmodel.ext.android.sharedViewModel 

private val viewModel: HomeViewModel by viewModel()

因此通过在 activity 中使用 viewModel() 和片段 class

中的 sharedViewModel<MyViewModel>() 解决了这个问题