【问题标题】:Android Hilt injecting interface to a viewmodel impelemented by an activityAndroid Hilt 向 Activity 实现的视图模型注入接口
【发布时间】:2021-03-15 12:54:23
【问题描述】:

DI 新手,使用 Hilt 我正在尝试将由 activty 实现的接口注入到视图模型中,如下所示:

活动类:

@AndroidEntryPoint
class MainActivity  : AppCompatActivity(), AnInterface{
    private val mainViewModel : MainViewModel by viewModels()
    // .....
}

视图模型:

@HiltViewModel
class MainViewModel : ViewModel() @Inject constructor(anInterface : AnInterface){

}

模块:

@Module
@InstallIn(ActivityComponent::class)
class ActivityModule {
    @Provides
    fun provideAnInterface(activity: Activity) : AnInterface = activty as AnInterface

}

给我错误:

AnInterface cannot be provided without an @Provides-annotated method.

【问题讨论】:

  • 问题解决了吗?仍然有一些情况我们需要通过活动上下文来实现接口。它可能是一些单独的逻辑,并在该接口中路由
  • @Steven.Nguyen 你有什么解决办法吗?
  • @Rakesh。不幸的是,我还没有找到解决方案,但它适用于 Hilt 的 2.28.3-alpha 版本。我相信有人会遇到同样的问题。 Google 建议使用 Live Data 在 vi​​ewModel 和 UI 之间进行交互。但显然,它并不适用于所有情况。如果我们可以在 ViewModel 中使用 Interface,那就更好了
  • @Louell 你的问题解决了吗?

标签: android dependency-injection android-viewmodel dagger-hilt


【解决方案1】:

您不应该将 Activity 的引用传递给 ViewModel,这显然违反了 MVVM 的松散耦合特性。依赖在 MVVM 中向内流动。 使用LiveData 来观察来自ViewModel 的数据在Activity/Fragment 中不要使用接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多