我了解为什么我们在匕首中使用范围。但是我不明白的是为什么范围是必要的?如果我理解正确,范围将用于在范围内具有单例对象。但是,依赖关系图不是确定对象的单例性质的吗?意思是,只要有依赖关系图,并且使用相同的依赖关系树进行注入,就可以获得相同的单例对象。
如果是,则仅使用@singleton批注即可实现。但是当我不得不创建依赖组件时,我不得不创建新的自定义范围。
答案 0 :(得分:0)
如果我理解正确,范围将用于在范围内具有单例对象。
作用域绑定指示Dagger在组件的整个生命周期中始终返回相同的实例。您遇到了一个常见的情况,即Singleton:如果您的组件打算与应用程序具有相同的生命周期,并且将该组件注释为@Singleton,则该组件中您注释为@Singleton的所有内容都会具有与应用程序相同的生存期和生命周期。
但是,一旦在Dagger中创建多个组件,它们必然就不会具有相同的生命周期:如果组件B依赖于组件A,则必须在拥有实例之后创建组件B。因此,这两个作用域具有相同的作用域注释实际上是没有意义的,即使 you 碰巧知道您的应用程序代码可以将 both < / em>这些组件是长期存在的单例组件,仅出于清楚,可重用或并行代码生成的原因而将它们分开。这也是you can't have a @Singleton
component with dependencies:@ Singleton组件旨在最好地包含VM生命周期的原因,因此,如果您在此之前创建了其他对象以作为依赖项提供,则可能是令人困惑。
所有这些,创建一个新的作用域非常容易,一旦完成,您就可以使用这些多个作用域来表示应用程序中的不同逻辑生命周期(例如Android Activity或Fragment的生命周期,用户的登录会话,Web服务器中单个请求的生命周期等)。