使用枚举时出现错误 [Dagger/DuplicateBindings]

问题描述 投票:0回答:1

我的 Android 应用程序有枚举类专业化:

enum class Specialization {
    DEVELOPER, MANAGER
}

此类的值被传递到视图模型,视图模型基于此向存储库发出请求:

class EmployeesViewModel @Inject constructor(
    private val typeSpecialization: Specialization,
    private val getEmployeesListUseCase: GetEmployeesListUseCase
): ViewModel() {

    val screenState: Flow<EmployeesFragmentScreenState> = getEmployeesListUseCase(typeSpecialization)
        .filter { it.isNotEmpty() }
        .map { EmployeesFragmentScreenState.Content(employees = it) as EmployeesFragmentScreenState }
        .onStart { emit(EmployeesFragmentScreenState.Loading) }

}

RecycleView中点击处理:

override fun onBindViewHolder(
        holder: SpecializationItemViewHolder,
        position: Int
    ) {
        val specItem = getItem(position)
        val binding = holder.binding

        binding.specializationName.text = specItem.specializationName
        binding.idspec.text = specItem.specialty_id.toString()

        binding.root.setOnClickListener {
            onSpecializationClickListener?.invoke(specItem.specialty_id)
        }

    }

选择一个选项以转移到下一个屏幕:

private fun setupClickListener(){
        specializationListAdapter.onSpecializationClickListener = {
            launchEmployeesListFragment(it)
        }
    }

private fun launchEmployeesListFragment(typeSpecialization: Int){
     val type = if(typeSpecialization == 101){
         Specialization.MANAGER
     }else{
         Specialization.DEVELOPER
    }
        findNavController().navigate(SpecializationListFragmentDirections.actionSpecializationListFragmentToEmployeesListFragment(type))
    }

接下来,我只需在下一个屏幕上获取特殊类型并将其传递给 ViewModel,ViewModel 通过 UseCase 向存储库发出请求。根据类型,会接收特定专业的员工。

Dagger 2 如何处理这种情况?当尝试为提供编写方法时,自然会出现错误[Dagger/DuplicateBindings]:

@Module
class DomainModule {

    @Provides
    fun provideSpecializationDeveloper(): Specialization {
        return Specialization.DEVELOPER
    }

    @Provides
    fun provideSpecializationManager(): Specialization {
        return Specialization.MANAGER
    }
}
android kotlin dagger-2
1个回答
0
投票

对于这些 Dagger 使用

@Qualifier
s。

@Module
class DomainModule {

    @Provides
    @DeveloperSpecialization
    fun provideSpecializationDeveloper(): Specialization {
        return Specialization.DEVELOPER
    }

    @Provides
    @ManagerSpecialization
    fun provideSpecializationManager(): Specialization {
        return Specialization.MANAGER
    }
}

@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class ManagerSpecialization

@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class DeveloperSpecialization

class EmployeesViewModel @Inject constructor(
    @DeveloperSpecialization private val  typeSpecialization: Specialization,
    private val getEmployeesListUseCase: GetEmployeesListUseCase
)
© www.soinside.com 2019 - 2024. All rights reserved.