Eclipse 如何在JvmModelInferrer中注入声明性服务
我有一个xtext项目,其中包含MyDslJvmModelInferrer。 在此示例中,我希望使用声明性服务(如中所述定义),并在服务中处理解析后的模型 如何在ModelInferrer中访问声明性服务Eclipse 如何在JvmModelInferrer中注入声明性服务,eclipse,xtext,declarative-services,Eclipse,Xtext,Declarative Services,我有一个xtext项目,其中包含MyDslJvmModelInferrer。 在此示例中,我希望使用声明性服务(如中所述定义),并在服务中处理解析后的模型 如何在ModelInferrer中访问声明性服务 谢谢,这是事先准备好的 您可以添加实例绑定,然后使用教程中描述的默认api代码 def void configureMyService(Binder binder) { val BundleContext bundleContext = FrameworkUtil.getBundle(
谢谢,这是事先准备好的 您可以添加实例绑定,然后使用教程中描述的默认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)
}
创建提供者类
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
}
}
import com.google.inject.Provider
类MyServiceProvider实现提供程序{
覆盖get(){
val BundleContext BundleContext=FrameworkUtil.getBundle(this.getClass()).getBundleContext();
val ServiceReference ServiceReference=bundleContext.getServiceReference(IMyService.getName());
val IMyService service=bundleContext.getService(serviceReference)作为IMyService;
回程服务
}
}
并使用它
导入com.google.inject.Provider
...
@注入提供程序myServiceProvider
... // 内法
val myService=myServiceProvider.getOk,我应该把这个方法放在哪里?对于运行时或ui模块(runtimemodule没有可用的osgi),我不知道您是否曾经在没有osgi环境的情况下单独调用代码。我猜,目前在eclipse环境中是不够的。在MyDslUiModule.java和MyDslUiModule.java中尝试了它。两个都不成功。你的错误是什么?您调试了cofigure方法吗?也许osgi服务尚未创建,您需要注入并调用MyServiceProider?我还将为此添加一些伪代码,我创建了MyServiceProvider,MyDslUiModule.java中的provideMyService方法,但似乎没有调用此方法。我用一个简单的println测试了它。但我的服务必须是可感知的。我在另一个同时运行的项目中使用了它。控制台中存在类似这样的错误:没有绑定MyService的实现。在org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:57)的mydsljvmModelInferer.lpServiceProvider(未知源)中查找com.google.inject.Provider for字段时
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
}
}