首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一把匕首2-单例与实战单例

一把匕首2-单例与实战单例
EN

Stack Overflow用户
提问于 2016-09-17 21:06:46
回答 1查看 2K关注 0票数 5

我正试图在我的项目中使用匕首2。Dagger提供了一种很好的方法来创建单例,我在我的项目中有一些,但是Dagger为每个@Singleton对象创建了一个新的对象图,因此我们必须在应用程序级别上创建组件,为此,我们应该使用singleton为类提供应用程序,这看起来并不是很好:(。问题是:我该留着我的老单身汉吗?还是我该用匕首?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-18 18:00:52

匕首是管理单例的一种更好的方法,部分原因是您不需要担心如何在单元测试中替换这些单例:您的单点将通过可以在单元测试中控制和覆盖的方法(即构造器参数和可访问字段)注入。

Dagger为每个@Singleton对象创建一个包含每个新容器的新对象图,因此我们必须在应用程序级别上创建组件。

如果您想要应用程序级的单例,您将希望在应用程序的生命周期中保留相同的组件实例,而不是用每个新的“容器”创建一个新的组件实例。该组件将包含并提供单个对象,因此您不应该需要应用程序中活动的多个对象图。如果某个外部创建者(例如Android或servlet引擎)在Dagger之外自己创建对象,这可能意味着您需要将Dagger组件保存在单例持卡器中(可能是一个线程安全的公共静态字段),就像您对旧的单点对象所做的那样;这仍然应该更容易理解和维护,因为您可以通过Dagger提供尽可能多的单点,并且只需要为组件本身担心一个外部管理的单点。

作为另一种选择,您可以将旧的单例保持与现有的完全相同,并在模块中编写@Provides方法,以便在Dagger创建的对象请求时检索这些单例实例。这将允许您在任何时候和任何地方创建一个新的对象图,并且您的单身汉仍然会表现为单例。不过,我要提醒您不要这样做,因为在这一点上,您的单个程序在应用程序中可以访问两种不同的方式,而且只有那些由Dagger创建或由Dagger管理的应用程序在测试中很容易被覆盖;这可能会令人困惑,也很难管理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39551758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档