在我公司,我们习惯于构建与命令行工具共享接口的Eclipse插件。我们正在研究将Eclipse 4 RCP API用于我们的下一个插件,但是我很难在自己的对象上使用注入。例如,我想声明必须由EclipseHelper实例化IHelper:
import alsaaudio
m = alsaaudio.Mixer('PCM')
m.setvolume(80)
vol = m.getvolume()
print(vol)
使用guice,我将在Injector中声明从IHelper到EclipseHelper的绑定,但是在Eclipse中,我仅找到摘要(如vogella一样)将IHelper绑定到EclipseHelper的具体实例。我不想这样做,构造实例可能会非常复杂。如何在应用程序级别声明绑定??
答案 0 :(得分:0)
如果您在OSGi环境中使用Eclipse DI(并且由于您尝试注入IWorkbench
我以为是),则可以使用ContextFunction
生成实例(如果实例不可用)在IEclipseContext中。
这会将ContextFunction放入OSGi服务层:
@Component(service = IContextFunction.class, property = "service.context.key=my.domain.IHelper")
public class IHelperFactoryCF extends ContextFunction {
@Override
public Object compute(IEclipseContext context) {
return ContextInjectionFactory.make(EclipseHelper.class, context);
}
}
您还可以将ContextFunction
放入DI上下文中。
有关更多信息,请参见此处:https://wiki.eclipse.org/Eclipse4/RCP/Contexts#Context_Functions