gpt4 book ai didi

android - dagger2 中的@Provide 和@Inject 有什么区别?

转载 作者:行者123 更新时间:2023-12-05 04:46:28 25 4
gpt4 key购买 nike

@Inject 和@Provide 有什么区别?

虽然两者都用于提供依赖性,但有什么区别?

最佳答案

这在 documentation 中有很好的介绍。 , @Inject@Provides 是在依赖图中引入依赖的两种不同方式。它们适用于不同的用例

@Inject

  1. 易于使用,只需在构造函数或属性上添加@Inject即可完成
  2. 它可用于注入(inject)类型以及类型属性
  3. 在某些人看来,在主观方面,它似乎比 @Provides 更清晰

@Provides

  1. 如果您无法访问要注入(inject)的类型的源代码,则不能使用 @Inject 标记其构造函​​数>
  2. 在某些情况下,您可能希望在将对象引入依赖关系图中之前对其进行配置,这不是 @Inject 的选项>
  3. 有时你想引入一个接口(interface)作为依赖项,为此你可以创建一个用 @Provides 注释的方法,它返回接口(interface)类型

以下是@Provides的以上三点的例子


如果您无法访问某个类型的源代码

// You can't mark constructor of String with @Inject but you can use @Provides

@Provides
fun provideString(): String {
return "Hello World"
}

在引入依赖图之前配置一个对象

@Provides
fun provideCar(): Car {
val car = Car()
// Do some configuration before introducing it in graph, you can't do this with @Inject
car.setMaxSpeed(100)
car.fillFuel()
return car
}

在依赖图中注入(inject)接口(interface)类型

interface Logger { fun log() }
class DiscLogger : Logger{ override fun log() { } }
class MemoryLogger : Logger { override fun log() { } }

@Provides
fun provideLogger(): Logger {
val logger = DiscLogger() \\ or MemoryLogger()
return logger
}

关于android - dagger2 中的@Provide 和@Inject 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68790768/

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