Java 在E4应用程序中使用与DI和@createable的接口
现在,使用Java 在E4应用程序中使用与DI和@createable的接口,java,dependency-injection,eclipse-rcp,e4,Java,Dependency Injection,Eclipse Rcp,E4,现在,使用@createable注释可以标记要注入的类,而无需在生命周期中手动将其添加到EclipseContext: 但是,下面的场景如何:假设我有一个接口SomethingService和一些实现,我想通过它的接口引用其中一个(即注释为可创建的),比如: @Creatable class Todo implements SomethingService { @Inject public Todo(SomeArg arg) { // placeholder }
@createable
注释可以标记要注入的类,而无需在生命周期中手动将其添加到EclipseContext
:
但是,下面的场景如何:假设我有一个接口SomethingService
和一些实现,我想通过它的接口引用其中一个(即注释为可创建的),比如:
@Creatable
class Todo implements SomethingService {
@Inject
public Todo(SomeArg arg) {
// placeholder
}
}
// Field Injection
@Inject private SomethingService service; // Todo instance
这似乎根本不起作用。有没有一种方法可以实现我所需要的?好吧,从我所看到的,我所要求的应该是如何使用OSGi声明性服务,或者像“Eclipse 4插件开发示例”中的示例那样修改激活器,如下所示:
public class Activator implements BundleActivator {
public void start(BundleContext bundleContext) throws
InjectorFactory.getDefault().
addBinding(IStringService.class).implementedBy(StringService.class);
}
}
谢谢您在Eclipse上下文中是否有
SomeArg
,以便可以找到它?Eclipse只对应用程序模型知道的对象(部件、处理程序…)进行注入。这只是一个例子,如果我使用一个空构造函数,结果是一样的。你想在哪个类中注入SomethingService,正如我说的,这必须是应用程序模型知道的东西-否则没有注入,你会得到null。是的,我正在将SomethingService注入到应用程序的一个部分中。事实上,另外一些东西被正确注入,比如声明性服务或事件代理。如果我把“SomethingService”改为“Todo service”,它就会工作。