我开始使用 google guice 并尝试创建一个单例对象。不确定如何传递 getClient(...) 所需的参数并使用 @Inject 注释创建对象。如有任何帮助,我们将不胜感激。
public class Client
{
private readonly Child _child;
public Client(Child child)
{
this._child = child;
}
static class NestedClass {
public String propX;
public String propY;
}
}
class MyHelperModule extends AbstractModule {
private static final String propXValue = "hello";
@Provides
@Singleton
private Client getClient(
String propY) {
Client.NestedClass nestedClass = new Client.NestedClass();
nestedClass.propX("hello");
nestedClass.propY(propY);
return new Client(nestedClass);
}
}
// helper class to create singleton object Client.
// Need to pass param propY while creating the instance
public Client _client;
@Inject
void newClient(Client client) {
this._client = client;
}
谢谢 斯里尼
@Provides
方法的参数是通过Guice中的绑定获得的。通常,您不应该在没有 绑定注释的情况下绑定像
String
这样常见的东西。所以像这样的东西应该让 Client
被创建:
@BindingAnnotation
@Retention(RUNTIME)
@interface PropX {}
// ...
bind(String.class).annotatedWith(PropX.class).toInstance("propX value");