【发布时间】:2015-11-29 01:31:00
【问题描述】:
我正在使用 weld-se 测试我的 JSR-330 注释类之一。
@Inject HelloWorld any;
@Inject @Named("impl") HelloWorld namedAsImpl;
@Inject @Named("demo") HelloWorld namedAsDemo;
@Inject @Impl HelloWorld qualifiedWithImpl;
@Inject @Demo HelloWorld qualifiedWithDemo;
我成功地为这些字段注入了 Guice、Dagger 和 Dagger2。
我准备了一个提供者类。
@RequestScoped
public class HelloWorldWeldProvider {
@Produces HelloWorld any() {
return current().nextBoolean()
? new HelloWorldImpl() : new HelloWorldDemo();
}
@Produces @Named("impl") HelloWorld namedAsImpl() {
return new HelloWorldImpl();
}
@Produces @Named("demo") HelloWorld namedAsDemo() {
return new HelloWorldDemo();
}
@Produces @Impl HelloWorld qualifiedWithImpl() {
return new HelloWorldImpl();
}
@Produces @Demo HelloWorld qualifiedWithDemo() {
return new HelloWorldDemo();
}
}
Weld 抱怨
WELD-001409: Ambiguous dependencies for type HelloWorld with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject ....any
at ....any(HelloWorldDependencyInjectionTest.java:0)
Possible dependencies:
- Producer Method [HelloWorld] with qualifiers [@Default @Any @Named] declared as [[BackedAnnotatedMethod] @Produces @Named ....namedAsDemo()],
- Producer Method [HelloWorld] with qualifiers [@Default @Any @Named] declared as [[BackedAnnotatedMethod] @Produces @Named ....namedAsImpl()],
- Producer Method [HelloWorld] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces ....any()]
这正常吗?还是CDI 的工作方式与DI 不同?`
【问题讨论】:
-
如果我不得不猜测,您违反了 CDI 规范中的 multiple qualifiers。 CDI 确实利用最佳匹配方法来满足注入点,而不是您可能在其他框架中找到的完全匹配。
标签: dependency-injection cdi weld