目前我正在尝试将Eclipse 3.x代码迁移到e4,我想访问e4依赖注入(DI)功能。我没有按照here所述进行完整的迁移。我只是在e4上导入3.x源以获取业务逻辑的DI功能(而不是UI)。
如果我遵循这种方法,我发现DI不起作用。有什么方法可以在Luna上导入的Eclipse 3.x源中实现DI吗?
答案 0 :(得分:2)
如果刚刚使用new xxxx
创建了一个对象,则不会注入该对象。
Eclipse从Application.e4xmi(和片段)中的描述创建的对象会自动注入(因此处理程序,部件,......)。注入器创建的@Creatable对象也会被注入。
您可以使用ContextInjectionFactory
注入其他对象,这需要您有权访问IEclipseContext
。
MyClass myClass = ContextInjectionFactory.make(MyClass.class, eclipseContext);
创建一个带注入的类的新实例。
MyClass myClass = new MyClass();
ContextInjectionFactory.inject(myClass, eclipseContex);
使用new
创建对象后对其进行注入。在这种情况下,类Constructor不能使用注入。
注意:树结构中有多个Eclipse上下文。零件有自己的上下文,因此如果使用该上下文创建对象,则对象将仅在零件中可用(以及与零件关联的任何处理程序等)。
要使对象可用,请使用MApplication
中的Eclipse上下文(调用getContext()
方法)。