gpt4 book ai didi

android - 用 Dagger/Hilt 辅助注入(inject)

转载 作者:行者123 更新时间:2023-12-05 00:00:49 27 4
gpt4 key购买 nike

假设我有一个名为 interfaceA 的接口(interface)

interface InterfaceA {}

并且是Assisted注入(inject)的具体实现

class ImplClass @AssistedInject constructor(@Assisted someClass:SomeCLass):InterfaceA {
}

在这种情况下,您将如何使用 Assisted Inject,其中 dagger 还需要将具体类与接口(interface)绑定(bind)。

下面是正确的方法吗?或者我遗漏了什么?

class ImplClass @AssistedInject constructor(@Assisted someClass:SomeCLass):InterfaceA {

@AssistedFactory
interface DaggerFactory : Factory {
override fun create(someClass:SomeCLass): ImplClass
}

interface Factory {
fun create(someClass:SomeCLass): InterfaceA
}
}

然后,像这样绑定(bind)

@Module
@InstallIn(ActivityComponent::class)
interface BindsSomething {
@Binds
fun binds(factory: ImplClass.DaggerFactory): ImplClass.Factory
}

虽然上述方法有效,但我想知道是否有更好的方法或更少样板的不同方法,我不知道。

最佳答案

这似乎是唯一的方法。我查阅了整个文档,没有其他方法可以声明 @AssistedFactory 来创建接口(interface)的具体实例。

一个轻微的改进是将 Factory 移动到 InterfaceA 中,然后绑定(bind)该 Factory 接口(interface)。这将在逻辑上将您的工厂与具体实现分开:

@Module
@InstallIn(ActivityComponent::class)
interface BindsSomething {
@Binds
fun binds(factory: ImplClass.DaggerFactory): InterfaceA.Factory
}

关于android - 用 Dagger/Hilt 辅助注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70174969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com