【问题标题】:Dagger inject Context in a ModelViewDagger 在 ModelView 中注入上下文
【发布时间】:2019-07-22 09:56:42
【问题描述】:

我正在尝试在我的 ModelView 中注入 Context,但我有点困惑:

这是我的Module,我给他发了一个Application 供以后使用这里的上下文,但我不知道它来自这个Application 或如何获取它:

@Module
class module {
    @Provides @Singleton fun appContext(application: Application): Context{
        return application
    }
}

这是我的Component

@Component(modules = [module::class])
interface component {
    fun providesApplication(): Application
}

最后我不知道如何在我的 ViewModel 中注入它,因为它没有构造函数来注入它。

我应该如何将上下文注入我的ViewModel

【问题讨论】:

  • 为什么要向 ViewModel 注入上下文?

标签: java android kotlin dagger model-view


【解决方案1】:

已经有内置的ViewModel 带上下文,将ViewModel 的继承替换为AndroidViewModel

见:https://developer.android.com/reference/android/arch/lifecycle/AndroidViewModel

【讨论】:

  • 我应该如何替换这一行:viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) 因为它让我发出警报。
【解决方案2】:

或者,你可以尝试这样的事情:

class YourViewModel @Inject constructor(context:Context) : ViewModel()

只是一个建议,如果没有其他方法,请听我说...

var context: Context? = null

fun initViewModelWithContext(context: Context) {
    this.context = context
}

如果您找不到使用 dagger 的解决方案,您也可能会做类似的事情。然后,您的所有函数都可以使用此本地上下文实例,并且此 ViewModel 将在需要时被销毁/创建,因此不会导致任何内存问题

【讨论】:

  • 有趣...但是我应该注入构造函数而不是上下文?我不知道如何完成它。
  • 上下文是必需的,因为我有几个有趣的人需要它。但是,我尝试您所说的,但问题是我需要制作构建器,并且通常在构造函数中完成。
  • 我认为您要做的是向我的 ViewModel 注入一个完整的构造函数,对吧?
猜你喜欢
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多