我有一个包含MyDslJvmModelInferrer的xtext项目。 在这个推理器中,我想使用我的声明式服务,它的定义与this tutorial中描述的一样,并处理服务中的解析模型。
如何在ModelInferrer中访问声明性服务?
提前感谢。
答案 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