Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在E4应用程序中使用与DI和@createable的接口_Java_Dependency Injection_Eclipse Rcp_E4 - Fatal编程技术网

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”,它就会工作。