建模应该只有一个活动实现的扩展点的正确方法是什么?

时间:2012-03-21 14:09:03

标签: eclipse eclipse-plugin eclipse-rcp rcp

我有一个RCP应用程序,它使用扩展点来定义各种可插入功能。

在某些情况下,我有一个扩展点,逻辑上可以一次激活许多实现:例如,一个DataFeed点,应用程序可以支持其中许多。

在其他情况下,只有在应用程序的运行实例中有一个单独的实现才有意义。我确实希望用户能够在它们之间切换,卸载/重新安装插件这样做并不是非常用户友好。

我想出办法处理这个问题的方法是将扩展点定义为使用IExecutableExtensionFactory的工厂,然后每个插件都必须优先说明它是否处于活动状态。如果它不活动,则工厂返回null,应用程序查看下一个选项。如果没有,那么使用一些合理的默认值。

虽然这感觉不太正确,但我想知道是否还有一种替代方法,我尚未对这种行为进行建模。任何人都有办法让这感觉更好吗?

1 个答案:

答案 0 :(得分:2)

在您的解决方案中,决定扩展程序是否处于活动状态的责任分配给扩展程序提供程序(工厂)。无论选择活动扩展的实际逻辑(在任何给定时刻),我都会说在扩展 point 提供程序中控制更好,也就是说,在调用的类中工厂。那是因为扩展提供者彼此不了解(或者不应该知道)。

这实际上是Eclipse中常见的情况,它通常通过扩展为扩展点处理程序定义其他属性来决定,以决定哪个扩展应该是活动的,具体取决于工作台状态(例如,参见 enabledWhen org.eclipse.ui.handlers扩展点的属性)或用户首选项。