Dagger 问题 - 生成用例有错误
Dagger Issue - Generate useCase has error
我创建了我的用例并设置了输入和输出,然后在模块上提供它,一切正常。
class GetProfileUseCase constructor(
private val repository: Repository,
defaultDispatcher: CoroutineDispatcher
) : SuspendUseCase<Request, ResultEntity<Response>>(defaultDispatcher) {
override suspend fun execute(parameters: Request): ResultEntity<Response> {
return repository.getProfile(parameters)
}
}
这是我的数据class
sealed class GetProfile : Serializable {
data class Request(
val nothing: Nothing? = null
) : GetProfile()
data class Response(
val user: User? = User()
) : GetProfile()
}
因为请求中没有参数 class 我尝试将其更改为:
object Request
但是构建时 IDE 错误:
错误:在 class ViewModel_Factory 中创建的方法无法应用于给定类型;
这是我的视图模型:
class ViewModel @Inject constructor(
private val getProfileUseCase: GetProfileUseCase
) : BaseViewModel()
我不知道为什么会这样,dagger 无法生成 classes !!!
将 Request 设置为数据 class 时它可以正常工作,但在将其设为对象时会崩溃 class
because there is no parameter in Request class i tried changed it to :
object Request
您似乎认为 object
与具有单个无参数 constructor
的 class
相同,这是不正确的。为了完全理解,我鼓励您阅读 线程。
但是,我将尝试提供一个简短的解释,说明为什么您的代码不起作用
当您执行 object Request
时,它会使 Request
成为 singleton,这意味着您不能再使用 val instance = Request()
创建它的 instances
,原因是Request
的 constructor
被 kotlin 编译器标记为私有。
因此,当您的代码 (dagger
) 尝试使用 new Request()
注入 Request
时,它会给您错误。
我创建了我的用例并设置了输入和输出,然后在模块上提供它,一切正常。
class GetProfileUseCase constructor(
private val repository: Repository,
defaultDispatcher: CoroutineDispatcher
) : SuspendUseCase<Request, ResultEntity<Response>>(defaultDispatcher) {
override suspend fun execute(parameters: Request): ResultEntity<Response> {
return repository.getProfile(parameters)
}
}
这是我的数据class
sealed class GetProfile : Serializable {
data class Request(
val nothing: Nothing? = null
) : GetProfile()
data class Response(
val user: User? = User()
) : GetProfile()
}
因为请求中没有参数 class 我尝试将其更改为:
object Request
但是构建时 IDE 错误:
错误:在 class ViewModel_Factory 中创建的方法无法应用于给定类型;
这是我的视图模型:
class ViewModel @Inject constructor(
private val getProfileUseCase: GetProfileUseCase
) : BaseViewModel()
我不知道为什么会这样,dagger 无法生成 classes !!!
将 Request 设置为数据 class 时它可以正常工作,但在将其设为对象时会崩溃 class
because there is no parameter in Request class i tried changed it to : object Request
您似乎认为 object
与具有单个无参数 constructor
的 class
相同,这是不正确的。为了完全理解,我鼓励您阅读
当您执行 object Request
时,它会使 Request
成为 singleton,这意味着您不能再使用 val instance = Request()
创建它的 instances
,原因是Request
的 constructor
被 kotlin 编译器标记为私有。
因此,当您的代码 (dagger
) 尝试使用 new Request()
注入 Request
时,它会给您错误。