0

我正在尝试覆盖几个注入以使用特定的测试模块进行测试。这对于像这样的真正单身人士来说效果很好:

...custom module...
bind(SomeClass.class).toInstance(instanceOfMockedClass);
...

现在,当ContextSingletons需要被覆盖时,这会带来问题。像上面那样做同样的事情显然会为所有上下文(服务、活动)注入相同的实例,其中一个单独的实例本来是正确的。我试图绕开我的脑袋,ContextScopedProvider但找不到在bind(...).toProvider(...)构造中实际使用它的方法,因为这个类本身并没有实现 Guice 的Provider<T>接口。

如何做到这一点?

(也在https://groups.google.com/forum/?fromgroups=#!topic/roboguice/MnWGrHFDOsQ上询问)

4

1 回答 1

1

为常规单身人士编写的另一种方法是这样的

bind(SomeClass.class).toProvider(SomeClassProvider.class).in(Singleton.class);

如果你这样做,你不需要在绑定时有可用的实例,虽然这对于单例很好,但显然不适用于 ContextSingleton,因为还没有上下文。

您可以对 ContextSingleton 使用相同类型的绑定:

bind(SomeClass.class).toProvider(SomeClassProvider.class).in(ContextSingleton.class);

现在,RoboGuice 为您注入的所有 SomeClass 实例都将得到适当的作用域,无论是 Singleton 还是 ContextSingleton。

于 2013-04-22T03:32:29.260 回答