3

我正在将 Hilt 用于 DI,并且我有这门课。

class ChatCore @Inject constructor()

此类需要注入到 fragment 中,无需标记该片段,@AdroidEntryPoint因为该片段可以附加到未标记为的活动@AndroidEntryPoint

我怎样才能做到这一点。我尝试使用 EntryPoint,但最终出现错误。

class MyFragment : Fragment() {

  lateinit var chatCore: ChatCore 

  @EntryPoint
  @InstallIn(FragmentComponent::class)
  interface ChatCoreProviderEntryPoint{
    fun chatCore():ChatCore
  }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val hiltEntryPoint = EntryPointAccessors.fromFragment(this, ChatCoreProviderEntryPoint::class.java)
    chatCore = hiltEntryPoint.chatCore()
  }

通过将其添加到应用程序容器中来解决它。

      @EntryPoint
      @InstallIn(ApplicationComponent::class)
      interface ChatCoreProviderEntryPoint{
        fun chatCore():ChatCore
      }


      val hiltEntryPoint = EntryPointAccessors.fromApplication(applicationContext,
         ChatCoreProviderEntryPoint::class.java)
4

1 回答 1

1

如果您不想使用AndroidEntryPoint您的模块(包含您的依赖项),则Fragment需要在不同的. 例如在not the内。@InstallComponentApplicationComponentFragmentComponent

然后你还需要使用相应的EntryPointAccessors.fromXyz(...)方法。例如,对于安装在ApplicationComponent您应该使用的模块中EntryPointAccessors.fromApplication(...)

于 2020-08-11T15:22:02.633 回答