我想将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
。
答案 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);
希望这有帮助。