【发布时间】:2012-09-20 14:22:36
【问题描述】:
我使用@ContextSingleton 来标记依赖于上下文注入的单例。然而,从 RoboGuice 源代码和我自己的测试来看,似乎它在 Application 上下文和不同的活动上下文之间产生了差异。这是完全有道理的,只是当我将它与这样的事件管理工具一起使用时——至少对我来说——有问题:
@ContextSingleton
public class Service {
@Inject
private Context context;
public void doSomething(@Observes MyEvent ev) {
...
}
}
虽然服务被定义为单例,但似乎在它第一次注入某个地方之前似乎没有创建它的实例,显然是通过延迟加载。因此,触发MyEvent 不会使听众调用。我们认为我们可以在我们的应用程序中“手动”预先加载类,例如
RoboGuice.get(context).getInstance(Service.class);
并因此注册监听器,但这只有在在之后也注入EventManager 以触发事件而不是应用程序的Activity 中执行时才能正常工作。
因此,在理想的世界中,我希望我可以告诉 RoboGuice 应该将单例绑定到哪个上下文,就像这样
@ContextSingleton(MyApplication.class)
public class Service {
...
}
但显然这是不可能的。
我错过了什么?
【问题讨论】:
标签: android dependency-injection guice roboguice