我有以下代码:
public interface DummyInterface {
}
和
@Singleton
@Creatable
public class DummyInterfaceImpl1 implements DummyInterface {
}
当我想要时,我可以简单地注入它,并且它工作得很好,(见下文):
@Inject
DummyInterfaceImpl1
但是我做不到
@Inject
DummyInterface
因为我得到了
无法处理“ClassWhereIInject.dummyInterface”:找不到参数“DummyInterface”的实际值。
所以,我试图理解,如果我使用@Creatable和@Singleon的组合,而不添加我想在IEclipseContext中注入的实例,那么我只能注入实现类而不是接口?
我可以看到这会有什么问题,特别是当一个人有同一个接口的多个实现类,并且依赖注入框架不知道要注入哪个...那就是你不使用@Named注释以指定...
答案 0 :(得分:1)
注射系统仅查找具有您指定名称的物品。它不会尝试找到碰巧实现该接口的类。所以,你不能使用具有不同名称的@Creatable类接口。
另一种方法是使用'ContextFunction'。这是一个在注射系统寻找名称时调用的函数。上下文函数可以创建适合的事物的实例并将其放在注入器的上下文中。上下文函数的完整详细信息为here