1

I have factory

@AssistedFactory
interface SetNumberUseCaseFactory {
    fun create(listener: UpdateFrontData,
               exercisedWithSetsDTO: MutableList<ExerciseWithSetNo>,
               setEntitiesList: MutableList<Exercise>): SetNumbersUseCase
}

in my viewModel I have:

@HiltViewModel
class TrainingAddViewModel @Inject constructor(
    private val trainingRepository: TrainingRepository,
    private val state: SavedStateHandle
) : ViewModel(), UpdateFrontData {
...
    @Inject
    lateinit var setNumberUseCaseFactory : SetNumberUseCaseFactory

    lateinit var setNumberUseCase : SetNumbersUseCase
...
    init {

        setNumberUseCase = setNumberUseCaseFactory.create(this, exercisedWithSetsDTO, setEntitiesList)

    }
...
}

and :

class SetNumbersUseCase @AssistedInject constructor(
    private val trainingRepository: TrainingRepository,
    @Assisted private val listener: UpdateFrontData,
    @Assisted private var exercisedWithSetsDTO: MutableList<ExerciseWithSetNo>,
    @Assisted private val setEntitiesList: MutableList<Exercise>
) {
...
}

and I get error: kotlin.UninitializedPropertyAccessException: lateinit property setNumberUseCaseFactory has not been initialized

Why SetNumberUseCaseFactory is not injected?

RCH
  • 1,247
  • 1
  • 11
  • 16
  • 1
    this format : `@Inject lateinit var setNumberUseCaseFactory : SetNumberUseCaseFactory`format is for field injection and does nothing in this context. Remove it and add `private val setNumberUseCaseFactory : SetNumberUseCaseFactory` as a constructor argument for constructor injection. I assume you are doing this way (Assisted Inject) in the first place to avoid circular dependency of the `UpdateFrontData` implementation, which in this case is implemented by the viewmodel, honestly feels very weird way to wire everything together. – Mark Dec 28 '21 at 19:07
  • That solved my problem. You are right - I had circular dependency implementation and was looking for a way to avoid that. Thank you Mark! – RCH Dec 28 '21 at 21:18

0 Answers0