绑定同一接口两次(Guice)



我的类(让我们称它们为XY)都实现Parser接口执行(相对)CPU密集型操作来构建某些语法的解析器(XY的不同语法)。

现在我想将(使用 Guice)XY的依赖项注入(上层)解析器P的构造函数中。P的两个参数都应该是Parser类型:

class P implements Parser {
@Inject
public P(Parser x, Parser y) {
// ...
}
}

我怎样才能让Guice区分P的两个论点中的哪一个应该得到XY

如您所知,XY应该@Singleton注释(但此注释似乎与问题无关)。

您需要像这样使用命名注释:

class P implements Parser {
@Inject
public P(@Named("x") Parser x, @Named("y") Parser y) {
// ...
}
}

在 Guice config 中将每个命名变量分配给他自己的实现类

bind(Parser.class)
.annotatedWith(Names.named("x"))
.to(ParserXImplementation.class);
bind(Parser.class)
.annotatedWith(Names.named("y"))
.to(ParserYImplementation.class);

相关内容

  • 没有找到相关文章