将相同的接口绑定两次(Guice)

时间:2017-12-15 19:29:10

标签: java class dependency-injection interface guice

我的类(让我们称之为FROM microsoft/aspnetcore-build:2.0 AS build-env WORKDIR /app ENV ASPNETCORE_URLS="http://*:5000" # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM microsoft/aspnetcore:2.0 WORKDIR /app COPY --from=build-env /app/out . EXPOSE 5000 ENTRYPOINT ["dotnet", "Wishare-Integration-Api.dll"] X)都实现Y接口做(相对)CPU密集型操作来构建某些语法的解析器({{1}的不同语法}和Parser)。

现在我想将XY的依赖关系注入(使用Guice)到(上层)解析器X的构造函数中。 Y的两个参数都应为P类型:

P

如何让Guice区分Parser的两个论点中哪一个会收到class P implements Parser { @Inject public P(Parser x, Parser y) { // ... } } P

根据您的理解,XY应注明X(但此注释似乎与问题无关)。

1 个答案:

答案 0 :(得分:1)

您需要使用Named这样的注释:

class P implements Parser {

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

}
Guice配置中的

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

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

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