0

我编写了一个使用Apache Felix 依赖管理的包。它的 Activator 扩展 了 DependencyActivatorBase。但是插件我的插件激活器扩展了AbstractUIPlugin。如何从 Eclipse 插件中的 felix 依赖管理器获取服务?

DependencyManager有一个 getDepenencyManagers 方法,但它是一个列表,不确定我如何知道列表中的正确管理器。

4

2 回答 2

2

DependencyActivatorBase 类只是为您提供方便的基类。如果由于某种原因您不能使用它(例如,可以说,在您的情况下),您总是可以从自己的类中自己实例化一个 DependencyManager 的实例。它所需要的只是对 BundleContext 的引用(您可以从 BundleActivator 的 start() 方法中获得,假设您自己实现了它)。然后做这样的事情:

DependencyManager dm = new DependencyManager(bundleContext);
dm.add(dm.createComponent()
  .setImplementation(YourComponent.class)
  .add(dm.createServiceDependency()
    .setService(LogService.class)
  )
);
于 2013-06-10T20:00:25.167 回答
2

是的,您可以在任何 OSGi 框架中使用 Dependency Manager,包括 Equinox(Eclipse 所基于的)。

为什么您的捆绑激活器需要扩展AbstractUIPlugin?您实际上是在使用AbstractUIPlugin,还是只是因为您使用 Eclipse PDE 来生成初始代码而为您生成?PDE 中的项目模板基本上都是垃圾,大多数 bundle 根本不需要激活器,很少有真正需要扩展AbstractUIPlugin.

因此,只需将您的激活器更改为扩展DependencyActivatorBase而不是AbstractUIPlugin.

于 2013-06-08T08:53:59.630 回答