Google Guice - 带参数的单例

问题描述 投票:0回答:1

我开始使用 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;
}

谢谢 斯里尼

java dependency-injection singleton guice
1个回答
0
投票

@Provides
方法的参数是通过Guice中的绑定获得的。通常,您不应该在没有
绑定注释
的情况下绑定像 String 这样常见的东西。所以像这样的东西应该让
Client
被创建:

@BindingAnnotation
@Retention(RUNTIME)
@interface PropX {}

// ...

bind(String.class).annotatedWith(PropX.class).toInstance("propX value");
© www.soinside.com 2019 - 2024. All rights reserved.