假设我有两个相似(但不同)的方法(或者可能是静态方法)create_x()
和create_y()
来创建对象(称之为x
和y
)两者(类Parser
的派生类。
现在我想绑定这两个方法创建的对象,如answer to my previous question中所示:
bind(Parser.class)
.annotatedWith(Names.named("x"))
.to(ParserXImplementation.class);
bind(Parser.class)
.annotatedWith(Names.named("y"))
.to(ParserYImplementation.class);
但由create_x()
,create_y()
而不是类ParserXImplementation
,ParserYImplementation
的实例创建对象。 (因此没有必要创建类ParserXImplementation
,ParserYImplementation
。)
请注意,我希望对象是单例。
如果create_x()
,create_y()
是静态方法,并且它们是实例方法,我希望得到答案。如果它们是实例方法,则包含它们的类本身可能会受到依赖注入。
怎么做? (将依赖项注入方法创建的实例)
答案 0 :(得分:0)
来自https://github.com/google/guice/wiki/ProvidesMethods:
当您需要代码来创建对象时,请使用@Provides
方法。该方法必须在模块中定义,并且必须具有@Provides
注释。方法的返回类型是绑定类型。只要注入器需要该类型的实例,它就会调用该方法。
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
...
}
@Provides
TransactionLog provideTransactionLog() {
DatabaseTransactionLog transactionLog = new DatabaseTransactionLog();
transactionLog.setJdbcUrl("jdbc:mysql://localhost/pizza");
transactionLog.setThreadPoolSize(30);
return transactionLog;
}
}
此外,它表示可以使用@Named("x")
和@Named("y")
等注释来区分x
和y
,如Binding the same interface twice (Guice)的答案所述。< / p>
这就是我需要的(但是这个方法是在模块中而不是在任意类中定义的。)