【问题标题】:How to inject view model with scope using sharedview model koin android如何使用sharedview model koin android注入具有范围的视图模型
【发布时间】:2021-02-17 06:40:06
【问题描述】:

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

模块类

    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.

刀柄更新

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

   private val viewModelx: HomeViewModel by viewModels

上述库有视图模型,可以直接懒惰地注入视图模型。

【问题讨论】:

    标签: android kotlin dependency-injection koin koin-scope


    【解决方案1】:
    import org.koin.android.viewmodel.ext.android.viewModel
    import org.koin.android.viewmodel.ext.android.sharedViewModel 
    
    private val viewModel: HomeViewModel by viewModel()
    

    所以通过在活动中使用viewModel() 和在片段类中使用sharedViewModel<MyViewModel>() 解决了这个问题

    【讨论】:

      【解决方案2】:

      你需要在 koin 模块中给出上下文

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

      在你想使用的活动中,只需使用

      private val viewModel: HomeViewModel by inject()
      

      它将返回您的 viewModel 的单个实例

      【讨论】:

      • 应用上下文。?将管理视图模型的范围和当前实例。?
      • 当我们在Application中启动koin时 startKoin{ androidContext(this@MyApplication) //它会得到Application的上下文}
      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多