我正在尝试使用特定测试模块覆盖几次进样测试。对于像这样的真实单身人士来说,这样做很好:
...custom module...
bind(SomeClass.class).toInstance(instanceOfMockedClass);
...
现在,当ContextSingletons
需要被覆盖时,这会带来问题。像上面这样做显然会为所有上下文(服务,活动)注入相同的实例,其中单独的实例是正确的。我试图绕着ContextScopedProvider
包围但是找不到在bind(...).toProvider(...)
构造中实际使用它的方法,因为这个类本身没有实现Guice的Provider<T>
接口。
如何实现这一目标?
(也在https://groups.google.com/forum/?fromgroups=#!topic/roboguice/MnWGrHFDOsQ上询问)
答案 0 :(得分:1)
另一种为常规单身人士写这个的方法就是这样
bind(SomeClass.class).toProvider(SomeClassProvider.class).in(Singleton.class);
如果你这样做,你不需要在绑定时提供实例,虽然对Singleton来说很好,但显然不适用于ContextSingleton,因为还没有上下文。
您可以对ContextSingleton使用相同类型的绑定:
bind(SomeClass.class).toProvider(SomeClassProvider.class).in(ContextSingleton.class);
现在,RoboGuice为您注入的SomeClass的所有实例都将适当确定范围,无论是Singleton还是ContextSingleton。