在Dagger 2中,当声明自定义范围时:
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface MyScope {
}
[我看到许多Dagger2教程都使用RUNTIME
作为保留策略。我了解SROUCE
,CLASS
和RUNTIME
之间的区别。但是我不明白为什么这些教程中的匕首自定义范围都使用RUNTIME
作为保留策略。
[我的意思是不是这样,以便在编译期间生成依赖关系图,这意味着仅在编译期间需要作用域,然后,为什么不使用CLASS
作为Dagger2的自定义作用域中的保留策略?有人可以向我解释吗?
你是对的。 Dagger无关紧要,但其他(运行时)依赖项注入框架则可能有用。
Dagger使用javax.inject
程序包,该程序包也被其他DI框架使用,并且还带有其自己的合同/文档。
如果您阅读Scope
,将会看到:
作用域注释[..]用
Scope
,@Scope
,通常是@Retention(RUNTIME)
进行注释。
因此,这实际上是遵守该合同(并支持其他DI框架),而不是Dagger在内部如何工作。