Вот один из подходов, который вы могли бы использовать, и я думаю, что это довольно симпатичный способ сделать это.
- Определите ваш
IMyService
интерфейс
- В вашем плагине определите новую точку расширения, скажем "myplugin.myservice"
- В схеме для этой точки расширения (PDE создаст ее для вас), добавьте элемент с именем «myService» с атрибутом «class» (или любым другим) и установите для его типа значение «java». Установите требуемый интерфейс (поле «Агрегаты») на
IMyService
.
Теперь, в вашем мастере, добавьте некоторый код, чтобы найти и создать реализацию IMyService
. Примерно так:
IExtensionRegistry registry = Platform.getExtensionRegistry();
for(IConfigurationElement element : registry.getConfigurationElementsFor("myplugin.myservice"))
{
if("myService".equals(element.getName()))
{
return (IMyService) element.createExecutableExtension("class"));
}
}
return new DefaultMyService();
Это даст вам первую зарегистрированную реализацию или значение по умолчанию, если его нет. В качестве альтернативы, вы можете добавить больше метаданных в схему точек расширения и использовать их для генерации списка опций, которые может выбрать пользователь или что-то в этом роде.
Это, я полагаю, предпочтительный способ сделать это в Eclipse, потому что он сохраняет ленивую загрузку. То есть, до тех пор, пока вы на самом деле не вызовете createExecutableExtension
, плагин с реализацией пользовательского сервиса может оставаться незагруженным.