Eclipse 4配置依赖注入的绑定

问题描述 投票:0回答:1

在我的公司,我们习惯于构建与命令行工具共享接口的Eclipse插件。我们正在研究将Eclipse 4 RCP API用于我们的下一个插件,但是我在自己的对象上使用注入时遇到了麻烦。例如,我想声明IHelper必须由EclipseHelper实例化:

interface IHelper { /* In core plugin (not Eclipse dependent) */
  ...
}

class EclipseHelper implements IHelper { /* In Eclipse plugin */
  @Inject
  EclipseHelper(IWorkbench workbench) { ... }
}

使用guice,我会在Injector中声明从IHelper到EclipseHelper的绑定,但是在Eclipse中我只找到片段(如vogella),将IHelper绑定到EclipseHelper的具体实例。我不想这样做,构造实例可能是任意复杂的。如何在应用程序级别声明绑定?

dependency-injection eclipse-plugin eclipse-rcp e4
1个回答
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-Context中。有关更多信息,请参见此处:https://wiki.eclipse.org/Eclipse4/RCP/Contexts#Context_Functions

© www.soinside.com 2019 - 2024. All rights reserved.