Eclipse 4 Настройка привязки внедрения зависимости - PullRequest
0 голосов
/ 25 апреля 2019

В моей компании мы привыкли создавать плагины Eclipse, которые совместно используют интерфейсы с инструментами командной строки. Мы исследуем использование Eclipse 4 RCP API для наших следующих плагинов, но у меня возникают проблемы с использованием инъекций в наши собственные объекты. Например, я хотел бы объявить, что IHelper должен быть создан EclipseHelper:

interface IHelper { /* In core plugin (not Eclipse dependent) */
  ...
}

class EclipseHelper implements IHelper { /* In Eclipse plugin */
  @Inject
  EclipseHelper(IWorkbench workbench) { ... }
}

С хитростью я бы объявил в Injector привязку IHelper к EclipseHelper, но в Eclipse я нахожу только фрагменты (как на vogella ), чтобы связать IHelper с конкретным экземпляром EclipseHelper , Я не хочу этого делать, создание экземпляра может быть сколь угодно сложным. Как я могу объявить привязку - на уровне приложения -?

1 Ответ

0 голосов
/ 26 апреля 2019

Если вы используете Eclipse DI в среде OSGi (и поскольку вы пытаетесь внедрить IWorkbench, я предполагаю, что вы это делаете), вы можете использовать ContextFunction для создания экземпляра, если он не доступен в IEclipseContext.

Это поместит ContextFunction на уровень сервиса OSGi:

@Component(service = IContextFunction.class, property = "service.context.key=my.domain.IHelper")
public class IHelperFactoryCF extends ContextFunction {
    @Override
    public Object compute(IEclipseContext context) {
        return ContextInjectionFactory.make(EclipseHelper.class, context);
    }
}

Вы также можете поместить ContextFunction в DI-Context. Смотрите здесь для получения дополнительной информации: https://wiki.eclipse.org/Eclipse4/RCP/Contexts#Context_Functions

...