2014-06-11 4 views
0

Settings 클래스를 e4가 삽입 할 수있는 OSGI 선언 서비스로 변환하려고합니다.Eclipse 4 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

@Inject를 어디에서하려고합니까? 이것은 응용 프로그램 모델이 알고있는 객체 (MPart, Handler, ...) 또는 자신의 객체입니까? –

+0

그것은 내 자신의 물건입니다. 코드는 github에서 찾을 수 있습니다. https://github.com/yaziza/org.eclipse.recommenders.privacy/blob/master/plugins/org.eclipse.recommenders.privacy.rcp/src/org/eclipse/recommenders/ privacy/rcp/ApprovalDialogJob.java – yasser

+2

'ContextInjectionFactory.make'를 사용하여 생성하거나'ContextInjectionFactory.inject'를 강제로 주입하지 않는 한, 사용자 자신의 객체에 대해 주입이 수행되지 않습니다. –

답변

1

코드를 보면 new 연산자를 사용하여 ApprovalDialogJob을 생성하고있는 것으로 보입니다. 이렇게하면 DI 엔진이 객체를 관리하지 않으므로 아무 값도 주입하지 않습니다.

당신은 당신의 클래스를 만들 수 ContextInjectionFactory를 사용해야합니다 :

ApprovalDialogJob job = new ApprovalDialogJob(extensionReader); 
ContextInjectionFactory.inject(job, eclipseContext); 
eclipseContext 당신이 Startup로 주입하거나 사용하여 얻을 수 있습니다 IEclipseContext의 인스턴스입니다

:

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

희망이 도움이됩니다.

+0

도움을 주셔서 감사합니다! 이제 작동합니다 :-) – yasser