Eclipse 4注入OSGI服务

时间:2014-06-11 11:55:22

标签: java eclipse dependency-injection e4

我想将Settings类转换为e4可以注入的OSGI声明服务。

我已在 OSGI-INF / settingsService.xml 中创建了该服务:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.recommenders.privacy.rcp">
        <implementation class="org.eclipse.recommenders.privacy.rcp.PrivacySettingsService"/>
    <service>
        <provide interface="org.eclipse.recommenders.privacy.rcp.IPrivacySettingsService"/>
    </service>
</scr:component>

我已使用@Inject对变量进行了注释,如下所述: http://toedter.com/2010/06/28/eclipse-4-0-dependency-injection-and-osgi-declarative-services/

@Inject
private IPrivacySettingsService privacySettingsService;

但我得到的是NullPointerException

1 个答案:

答案 0 :(得分:2)

查看代码,您的问题似乎是,您正在使用ApprovalDialogJob运算符创建new。这样DI引擎就不会管理对象,因此它不会注入任何值。

您需要使用ContextInjectionFactory创建班级:

ApprovalDialogJob job = new ApprovalDialogJob(extensionReader);
ContextInjectionFactory.inject(job, eclipseContext);

eclipseContext是IEclipseContext的一个实例,你可以通过将其注入Startup或使用:

获得。
BundleContext bundleContext = FrameworkUtil.getBundle(Startup.class).getBundleContext();
IEclipseContext context = EclipseContextFactory.getServiceContext(bundleContext);

希望这有帮助。