在E4应用程序中使用DI和@Creatable的界面

时间:2014-05-20 20:23:02

标签: java dependency-injection eclipse-rcp e4

现在使用@Creatable注释可以标记要注入的类,而无需在生命周期中手动添加EclipseContext

http://blog.vogella.com/2012/02/29/eclipse-4-is-now-a-full-dependency-injection-container-with-creatable/

然而,下面的场景呢:假设我有一个接口SomethingService和一些实现,我想通过它的接口引用其中一个(即一个注释为可创建的),类似的东西:

@Creatable
class Todo implements SomethingService {
    @Inject
    public Todo(SomeArg arg) {
    // placeholder
    }
 }

 // Field Injection
 @Inject private SomethingService service;  // Todo instance 

这似乎根本不起作用。有没有办法实现我的需要?

1 个答案:

答案 0 :(得分:3)

好吧,从我能看到的内容我应该用OSGi声明服务完成,或者像“Eclipse 4 Plug-in Development by Example”中的示例那样修改Activator,如下所示:

public class Activator implements BundleActivator {
    public void start(BundleContext bundleContext) throws 
        InjectorFactory.getDefault().
           addBinding(IStringService.class).implementedBy(StringService.class);
    }
}

由于