2016-01-03 2 views
0

У меня есть проект xtext, который содержит MyDslJvmModelInferrer. В этом аргументе я хотел бы использовать мою декларативную услугу, которая определена, как описано в this tutorial, и обрабатывать проанализированную модель внутри службы.Как внедрить декларативное обслуживание моего JvmModelInferrer

Как я могу получить доступ к декларативной службе в моем ModelInferrer?

Спасибо заранее.

ответ

0

Вы можете добавить экземпляр привязки, а затем использовать код АНИ по умолчанию, как описано в руководстве

def void configureMyService(Binder binder) { 
    val BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); 
    val ServiceReference<?> serviceReference = bundleContext.getServiceReference(IMyService.getName()); 
    val IMyService service = bundleContext.getService(serviceReference) as IMyService; 
    binder.bind(IMyService).toInstance(service) 
} 

то нормальный @Inject IMyService myService должен работать

обновление: я не знаю, когда OSGi услуги будут доступны так что вы, возможно, придется сделать это ленивый

в модуле

import com.google.inject.Provider 
... 
def Provider<IMyService> provideIMyService() { 
    return new MyServiceProvider 
} 

создать класс поставщика

import com.google.inject.Provider 
class MyServiceProvider implements Provider<IMyService> { 

    override get() { 
     val BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); 
     val ServiceReference<?> serviceReference = bundleContext.getServiceReference(IMyService.getName()); 
     val IMyService service = bundleContext.getService(serviceReference) as IMyService; 
     return service 
    } 

} 

и использовать его импорт com.google.inject.Provider ... @Inject Provider myServiceProvider ... // внутри метод вал MYSERVICE = myServiceProvider.get

+0

Хорошо, и где я должен положить этот метод? Я немного невежественный. – Mino

+0

к моменту выполнения или ui (runtimemodule не имеет доступных osgi). Я не знаю, если вы когда-либо называете свой код автономным без каких-либо ограничений osgi. –

+0

Я думаю, на данный момент в среде затмения достаточно. Пробовал в MyDslRuntimeModule.java MyDslUiModule.java. Оба не были успешными. – Mino