2012-07-23 75 views
2

我tryied谷歌吉斯看完这篇文章后“注入”:http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/Guice和注射器

但有件事我不明白:当您使用吉斯的@Singleton anotation,注射注入相同实例,但只适用于一个Injector。

如果我在其他地方创建了其他注入器,@Singletion不起作用(如文档中所述)。

因此,我将不得不在我的代码中的任何地方传递注入器实例,或者使它在单例中可用。

而这正是我想避免的。

如何管理injectorS以便每次都可以返回相同的实例?

谢谢。

+1

>如果我在其他地方创建了其他注射器 为什么要创建其他注射器? – 2012-07-23 14:57:36

+0

@mlk,因为我按照以下教程尝试了Guice:http://code.google.com/p/google-guice/wiki/GettingStarted,他们通过在注入器上调用getInstance来构建对象。但我不认为那个注射器必须在我的应用程序中到处通过。 – 2012-07-24 11:40:22

+0

你应该尝试拥有的是一个单一的对象树,而在主体中你有一个引导世界的引导类。 – 2012-07-24 12:54:12

回答

3

使用Guice的代码通常不需要访问注入器本身:如果对象需要构建多个对象,它们将获得它们的依赖关系或其依赖关系或Provider<T>

通常情况下,对象只需要注入器,如果他们有依赖关系,但本身不是由注入器创建的(因此它们不能注入它们的依赖关系)。如果你到处使用Guice,你可能只需要在应用程序启动时这样做。如果你只使用Guice作为你的项目的一部分,注入器将成为一个单一的单例,代表你现在通过它访问的所有其他单例。

请注意,注解@Singleton的类仍然是单身对象,尽管没有与未注入的单身人士相关的一些行李。你仍然应该尽量避免依赖它们太多。