在Guice提供程序中使用命名注释

时间:2013-02-12 18:45:50

标签: guice

我的应用程序中有两个绑定类型的命名实例:

bind(Foo.class).toProvider(FooProvider.class);
bind(Foo.class).annotatedWith(Names.named("prime")).toProvider(FooPrimeProvider.class);

我有一个想要使用每个实例的类。由于技术原因,此类不能直接注入实例,它必须向实例注入提供程序:

class Bar {
    @Inject static Provider<Foo> fooProvider;
    @Inject @Named("prime") static Provider<Foo> fooPrimeProvider; // WRONG!
}

问题是上面的FooPrime注入没有注入一个名为“prime”的实例,它注入一个名为“prime”的 Provider ,这当然不是我想要的。

如何告诉Guice为名为“prime”的Foo实例注入提供程序?

1 个答案:

答案 0 :(得分:7)

我刚刚写了一个测试,它完全符合您的要求:https://gist.github.com/jangalinski/4943871