Hilt - 片段中的入口点
Hilt - EntryPoint in Fragment
我正在为 DI 使用 Hilt,我有这个 class。
class ChatCore @Inject constructor()
此 class 需要注入到片段中,而不会将片段标记为 @AdroidEntryPoint
,因为此片段可以附加到未标记为 @AndroidEntryPoint
的 activity ]
我怎样才能做到这一点。我尝试使用 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)
如果您不想为您的 Fragment
使用 AndroidEntryPoint
,您需要 @Install
您的模块(包含您的依赖项)在不同的 Component
中。
例如。在 ApplicationComponent
内而不是 FragmentComponent
.
那么你还需要使用相应的EntryPointAccessors.fromXyz(...)
方法。例如。对于安装在 ApplicationComponent
中的模块,您应该使用 EntryPointAccessors.fromApplication(...)
.
我正在为 DI 使用 Hilt,我有这个 class。
class ChatCore @Inject constructor()
此 class 需要注入到片段中,而不会将片段标记为 @AdroidEntryPoint
,因为此片段可以附加到未标记为 @AndroidEntryPoint
的 activity ]
我怎样才能做到这一点。我尝试使用 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)
如果您不想为您的 Fragment
使用 AndroidEntryPoint
,您需要 @Install
您的模块(包含您的依赖项)在不同的 Component
中。
例如。在 ApplicationComponent
内而不是 FragmentComponent
.
那么你还需要使用相应的EntryPointAccessors.fromXyz(...)
方法。例如。对于安装在 ApplicationComponent
中的模块,您应该使用 EntryPointAccessors.fromApplication(...)
.