【发布时间】:2016-01-03 16:49:16
【问题描述】:
我有一个包含 MyDslJvmModelInferrer 的 xtext 项目。 在这个推断器中,我想使用我的声明式服务,其定义如this tutorial 中所述,并在服务中处理解析后的模型。
如何访问我的 ModelInferrer 中的声明式服务?
提前致谢。
【问题讨论】:
标签: eclipse xtext declarative-services
我有一个包含 MyDslJvmModelInferrer 的 xtext 项目。 在这个推断器中,我想使用我的声明式服务,其定义如this tutorial 中所述,并在服务中处理解析后的模型。
如何访问我的 ModelInferrer 中的声明式服务?
提前致谢。
【问题讨论】:
标签: eclipse xtext declarative-services
您可以添加实例绑定,然后使用教程中描述的默认 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 提供者 myServiceProvider ... // 内部方法 val myService = myServiceProvider.get
【讨论】: