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