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