【发布时间】:2021-01-03 17:02:09
【问题描述】:
所有运行时 DI(guice、spring、koin、kodein)都支持泛型。
Dagger 2 - 我知道的唯一 DI 编译时工具 - 不支持泛型。
是否有支持 kotlin(或 java)泛型的编译时依赖注入工具?
编辑:示例:
class Engine<T>
class Car<T> @Inject constructor(engine: Engine<T>)
如果我使用 Dagger 2 并创建:
@Module
object MyModule
{
@Provides
fun <T> car(engine: Engine<T>): Car<T> = Car(engine)
}
@Component(modules = [MyModule::class])
interface MyComponent
{
fun <T> car(): Car<T>
}
它不起作用,因为 Dagger 2 在编译时会说,带有 @Provide 的方法不能是泛型类型
【问题讨论】:
-
为什么说 Dagger 不支持泛型?
-
@LouisWasserman stackoverflow.com/questions/35784511/…
-
使用 Hilt,您不需要组件类,因此不需要注入方法
-
@IR42 Hilt 仅适用于 Android(如果我错了请告诉我,从未使用过)
-
你调查过Micronaut吗?我不知道它的泛型支持。
标签: java kotlin dependency-injection