无法在具有fragmentComponent范围的视图模型中注入存储库

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

我使用带有 4 个选项卡的底部导航。我想在选项卡1中使用不同的实例加载FragmentA,并在选项卡2中使用不同的实例和不同的viewModel实例加载相同的片段(FragmentA)。我正在使用 Hilt 将存储库注入视图模型中。

现在我面临一个问题,即 FragmentA 正在使用相同的实例加载到选项卡 1 和 2 中。

  1. SingleComponent 在这里不起作用。
  2. ActivityComponent 也不起作用,因为它将在整个活动中创建单个实例。 tab1 和 tab2 将在同一活动中打开。

我尝试使用 FragmentComponent,但无法将存储库注入 ViewModel。

我期待 FragmentComponent 存储库注入视图模型而没有任何问题或任何其他更好的解决方案?

@Module
@InstallIn(FragmentComponent::class)
object ProductUseCaseModule {
    @Provides
    fun provideGetProductUseCase(
        productRepository: ProductRepository
    ): GetProductUseCase {
        return GetProductUseCaseDefault(productRepository)
    }
 }




@HiltViewModel
Class ProductViewModel @Inject constructor(private val getProductUseCase: GetProductUseCase): ViewModel{
}



@AndroidEntryPoint
Class ProductFragment : Fragment {
  private val viewModel : ProductViewModel by viewModels()
}
android android-jetpack android-viewmodel dagger-hilt
1个回答
0
投票

我在该函数中使用了 ViewModelComponent 和 ViewModelScoped,它在不同的选项卡中创建了新实例。

工作代码:

@Module
@InstallIn(ViewModelComponent::class)
object ProductUseCaseModule {

    @ViewModelScoped
    @Provides
    fun provideGetProductUseCase(
        productRepository: ProductRepository
    ): GetProductUseCase {
        return GetProductUseCaseDefault(productRepository)
    }

 }
© www.soinside.com 2019 - 2024. All rights reserved.