如何让消费者 select 特定的第 3 方提供商
How to let a consumer select specific 3party provider
什么是以下场景的良好 osgi 实现?
我有一个通用算法,分为多个模块。这个想法是每个模块都可以由具有特定配置需求的第三方扩展。我的主要算法主要由用户配置 select 要包含哪个模块。由于这个配置文件可能很难写,我想创建一个 workbench 来帮助他做到这一点。
我的第一个想法是将我的主要算法视为使用 DS 的多个模块提供者的消费者。用例是:用户配置主要算法和他要使用的子模块;然后当他运行算法时,我希望 workbench 创建具有良好配置的主要算法服务。但据我了解,osgi 中的服务被设计为独立于提供者。服务对我有用吗?
按照你刚刚描述的方式做你想做的事会给你带来很多心痛和问题。相反,我建议您使用更实际的方法:
- 在你的包中定义接口来定义你的算法可以扩展的方式
- 使用OSGi的服务层来收集接口的实现(DS可以在这里帮助你)
- 有一个配置 class/object 定义了以上哪些是特定实例的selected/activated
- 执行算法时,从服务层查找需要的服务并使用它们。
另外,如果你想要一个完整的workbench,你可以直接使用有助于协调的扩展和扩展点。
什么是以下场景的良好 osgi 实现?
我有一个通用算法,分为多个模块。这个想法是每个模块都可以由具有特定配置需求的第三方扩展。我的主要算法主要由用户配置 select 要包含哪个模块。由于这个配置文件可能很难写,我想创建一个 workbench 来帮助他做到这一点。
我的第一个想法是将我的主要算法视为使用 DS 的多个模块提供者的消费者。用例是:用户配置主要算法和他要使用的子模块;然后当他运行算法时,我希望 workbench 创建具有良好配置的主要算法服务。但据我了解,osgi 中的服务被设计为独立于提供者。服务对我有用吗?
按照你刚刚描述的方式做你想做的事会给你带来很多心痛和问题。相反,我建议您使用更实际的方法:
- 在你的包中定义接口来定义你的算法可以扩展的方式
- 使用OSGi的服务层来收集接口的实现(DS可以在这里帮助你)
- 有一个配置 class/object 定义了以上哪些是特定实例的selected/activated
- 执行算法时,从服务层查找需要的服务并使用它们。
另外,如果你想要一个完整的workbench,你可以直接使用有助于协调的扩展和扩展点。