如何为我的JvmModelInferrer注入一个声明性服务

时间:2016-01-03 16:49:17

标签: eclipse xtext declarative-services

我有一个包含MyDslJvmModelInferrer的xtext项目。 在这个推理器中,我想使用我的声明式服务,它的定义与this tutorial中描述的一样,并处理服务中的解析模型。

如何在ModelInferrer中访问声明性服务?

提前感谢。

1 个答案:

答案 0 :(得分:0)

您可以添加实例绑定,然后使用教程

中所述的默认api代码
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     ... //内部方法     val myService = myServiceProvider.get