@Inject 和@Provide 有什么区别?
虽然两者都用于提供依赖性,但有什么区别?
最佳答案
这在 documentation 中有很好的介绍。 , @Inject
和@Provides
是在依赖图中引入依赖的两种不同方式。它们适用于不同的用例
@Inject
- 易于使用,只需在构造函数或属性上添加
@Inject
即可完成 - 它可用于注入(inject)类型以及类型属性
- 在某些人看来,在主观方面,它似乎比
@Provides
更清晰
@Provides
- 如果您无法访问要注入(inject)的类型的源代码,则不能使用
@Inject
标记其构造函数> - 在某些情况下,您可能希望在将对象引入依赖关系图中之前对其进行配置,这不是
@Inject
的选项> - 有时你想引入一个接口(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/