我编写了一个使用Apache Felix 依赖管理的包。它的 Activator 扩展 了 DependencyActivatorBase。但是插件我的插件激活器扩展了AbstractUIPlugin。如何从 Eclipse 插件中的 felix 依赖管理器获取服务?
DependencyManager有一个 getDepenencyManagers 方法,但它是一个列表,不确定我如何知道列表中的正确管理器。
我编写了一个使用Apache Felix 依赖管理的包。它的 Activator 扩展 了 DependencyActivatorBase。但是插件我的插件激活器扩展了AbstractUIPlugin。如何从 Eclipse 插件中的 felix 依赖管理器获取服务?
DependencyManager有一个 getDepenencyManagers 方法,但它是一个列表,不确定我如何知道列表中的正确管理器。
DependencyActivatorBase 类只是为您提供方便的基类。如果由于某种原因您不能使用它(例如,可以说,在您的情况下),您总是可以从自己的类中自己实例化一个 DependencyManager 的实例。它所需要的只是对 BundleContext 的引用(您可以从 BundleActivator 的 start() 方法中获得,假设您自己实现了它)。然后做这样的事情:
DependencyManager dm = new DependencyManager(bundleContext);
dm.add(dm.createComponent()
.setImplementation(YourComponent.class)
.add(dm.createServiceDependency()
.setService(LogService.class)
)
);
是的,您可以在任何 OSGi 框架中使用 Dependency Manager,包括 Equinox(Eclipse 所基于的)。
为什么您的捆绑激活器需要扩展AbstractUIPlugin
?您实际上是在使用AbstractUIPlugin,
还是只是因为您使用 Eclipse PDE 来生成初始代码而为您生成?PDE 中的项目模板基本上都是垃圾,大多数 bundle 根本不需要激活器,很少有真正需要扩展AbstractUIPlugin
.
因此,只需将您的激活器更改为扩展DependencyActivatorBase
而不是AbstractUIPlugin
.