构造函数的@injection 在Android中不起作用

Posted

技术标签:

【中文标题】构造函数的@injection 在Android中不起作用【英文标题】:@injection of constructor is not work in Android 【发布时间】:2021-12-16 09:06:06 【问题描述】:

我正在尝试使用 Hilt 注入数据结构,但编译器说:

@HiltViewModel annotated class should contain exactly one @Inject annotated constructor.

我不明白为什么,也许我误用了 Hilt 的一些代码。

这是我的视图模型:

@HiltViewModel
class AccountProfileViewModel @Inject constructor() 

    @Inject
    lateinit var userProfile: UserProfileMemorySource

UserProfileMemorySource 看起来像这样:

@Singleton
class UserProfileMemorySource @Inject constructor() : UserProfileInterface

    private var userProfile: UserProfile? = null

    override fun getUserProfile(): UserProfile? 
        return this.userProfile
    

    override fun saveUserProfile(userProfile: UserProfile?) 
        this.userProfile = userProfile
    

    override fun invalidate() 
        userProfile = null
    



而数据类使用的是

data class UserProfile(
    val name: UserName? = null,
    val email: String = "",
    val phone: String = "",
    val address: Address? = null,
    val url: String = ""
)

我正在尝试将数据保存到内存中。

知道为什么它不起作用吗? 谢谢

【问题讨论】:

【参考方案1】:

依赖应该通过构造函数传递

@HiltViewModel
class AccountProfileViewModel @Inject constructor(
    private val userProfile: UserProfileMemorySource
)  
...

【讨论】:

以上是关于构造函数的@injection 在Android中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

尝试在构造函数中访问 @Inject bean 时出现 NullPointerException

Dagger 2 错误:依赖“不能在没有 @Inject 构造函数的情况下提供”,而它实际上是用 @Inject 注释的

Kotlin + Dagger2:不能在没有 @Inject 构造函数或 @Provides- 或 @Produces-annotated 方法的情况下提供

Android开发学习之路--Kotlin之类及对象

Android Ptrace Inject

Angular 14 新的 inject 函数介绍