Android 匕首2注射什么和不注射什么

Android 匕首2注射什么和不注射什么,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我已经读了几个小时了,但找不到答案。我应该注射什么,不应该注射什么 我有我的LoginViewModel和一些注入的依赖项,但我不确定是否必须注入例如我的User数据类(在其他数据类中)或只是实例化它 LoginViewModel.kt class LoginViewModel @Inject constructor( private val loginRepositoryImpl: LoginRepositoryImpl, private val baseApplication

我已经读了几个小时了,但找不到答案。我应该注射什么,不应该注射什么

我有我的
LoginViewModel
和一些注入的依赖项,但我不确定是否必须注入例如我的
User
数据类(在其他数据类中)或只是实例化它

LoginViewModel.kt

class LoginViewModel @Inject constructor(
    private val loginRepositoryImpl: LoginRepositoryImpl,
    private val baseApplication: BaseApplication,
    private val networkUtils: NetworkUtils,
    private val sharedPreferences: SharedPreferences) : ViewModel() {

    fun processLogin(username: String, password: String) {
        val user = User(username, password)
        ...
    }
    ...
}
User.kt

data class User (
    @SerializedName("usuario")
    var user: String,
    @SerializedName("clave")
    var password: String = "",
    @SerializedName("nombre")
    var name: String = ""
)

这取决于你为什么要用匕首。假设您要测试以下代码。loginRepositoryImpl可能正在通过网络访问身份验证服务,因此您希望提供一个替代实现。用户只是一个数据类,提供模拟实现没有任何价值

    fun processLogin(username: String, password: String): Boolean {
        val user = User(username, password)
        val isValidLogin = loginRepositoryImpl.login(user)
        return isValidLogin
        ...
    }

不,你不需要注入你的用户数据,为什么注入你的基本应用程序听起来不正确

你能解释一下为什么我不需要注入它吗?还有,为什么注入应用程序类听起来不正确?例如,如果您不使用dagger,您可以通过扩展
AndroidViewModel
来引用应用程序类,但如果我不想为
LoginRepositoryImpl
提供替代实现,我仍然需要为测试目的注入它,如模拟其结果。如果使用Kotlin,您也可以使用默认值构造函数参数并向构造函数提供模拟以进行测试。我找到了Misko Hevery的一个不错的例子,它解释了我的情况
private val loginRepositoryImpl:loginRepositoryImpl,
这听起来与您应该做的相反。是因为实际的实现,而不是接口?在这种情况下,是的,我需要改变它,我刚刚开始学习DI概念。你能帮我回答标题中的问题吗,我还在努力