栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

匕首2中的范围

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

匕首2中的范围

我假设

LoginComponent
MenuComponent
分别使用,例如
LoginActivity
和中
MenuActivity
。每个组件都是内置的
Activity.onCreate
。如果是这样,则每次创建新活动,模块和依赖项时,都会重新创建组件,而与它们绑定的范围无关。因此,你得到的新情况
MainProvider
AccountManager
每一次。

MenuActivity
并且
LoginActivity
具有单独的生命周期,因此
MailModule
两者的依赖关系不能都是单例的。你需要的是申报根组件与
@Singleton
范围(例如,在应用程序子类),化妆
MenuComponent
LoginComponent
依赖于它。活动级别组件不能@Singleton范围,最好使用
@Scope
注释创建自己的范围,例如:

@Retention(RetentionPolicy.RUNTIME)@Scopepublic @interface MenuScope {}

或者,您可以不加限制。

关于范围,以下是最初Dagger 2提案的简要说明:

@Singleton@Component(modules = {…})public interface ApplicationComponent {}

该声明使dagger可以执行以下约束:

  • 给定的组件只能具有未限制范围或声明的作用域的绑定(包括类的作用域注释)。即,一个组件不能代表两个范围。如果未列出作用域,则绑定只能是无作用域的。
    *范围内的组件只能具有一个范围内的依赖项。这是强制两个组件不要各自声明自己的作用域绑定的机制。例如,每个都有自己的@Singleton缓存的两个Singleton组件将被破坏。
  • 组件的范围不得出现在其任何传递依赖项中。例如:SessionScoped-> RequestScoped->
    SessionScoped没有任何意义,是一个错误。
  • @Singleton被特别对待,因为它不能具有任何范围内的依赖项。每个人都希望Singleton是“根”。

这种规则组合的目的是要强制实施范围时,组件的结构与我们以前使用Dagger 1.0
plus()的ObjectGraphs所具有的结构相同,但具有对所有对象的静态知识的能力。绑定及其范围。换句话说,当应用范围时,这将图的可构建范围限制为仅可正确构建的图。

根据我自己的实践,很明显根本不使用

@Singleton
。取而代之的是,我使用
@ApplicationScope
。它用于在整个应用程序上定义单例,并且没有其他限制
@Singleton

希望对您有帮助:)。快速理解是很棘手的,需要时间,至少对我来说是这样。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号