Да, вы можете использовать Dependency Manager в любой среде OSGi, включая Equinox (на которой основан Eclipse).
Почему ваш активатор пакета должен расширять AbstractUIPlugin?? Вы на самом деле используете AbstractUIPlugin, или это просто сгенерировано для вас, потому что вы использовали Eclipse PDE для генерации исходного кода? Шаблоны проектов в PDE в основном хлам, большинству бандлов вообще не нужны активаторы, и очень-очень немногие действительно нуждаются в расширении AbstractUIPlugin.
Итак, просто измените свой активатор на расширение DependencyActivatorBase вместо AbstractUIPlugin.
personNeil Bartlettschedule08.06.2013
comment
Совершенно верно, я расширил образцы PDE. Думаю, я просто предположил, что AbstractUIPlugin был необходимым компонентом для добавления любых элементов пользовательского интерфейса в мой плагин. Не могли бы вы вкратце сказать, какова цель AbstractUIPlugin?
- personharschware; 08.06.2013
comment
AbstractUIPlugin упрощает доступ к таким вещам, как настройки и реестр образов. JavaDoc для класса содержит полную информацию. Однако ни одна из этих вещей не является труднодоступной... если они вам нужны, просто прочитайте код AbstractUIPlugin и следуйте тому же шаблону.
- personNeil Bartlett; 09.06.2013
Класс DependencyActivatorBase — это просто базовый класс, созданный для вашего удобства. Если по какой-то причине вы не можете его использовать (например, в вашем случае), вы всегда можете самостоятельно создать экземпляр DependencyManager из своего собственного класса. Все, что ему нужно, это ссылка на BundleContext (которую вы можете получить из метода start() BundleActivator, предполагая, что вы реализуете это самостоятельно). Затем просто сделайте что-то вроде этого:
Я думал о DependencyManager, таком как Spring ApplicationContext. Итак, в отличие от Spring ApplicationContext, можно ли иметь более одного DependencyManager? Я предполагаю, что в одном DependencyManager нет необходимости, поскольку он просто взаимодействует со службами, поддерживаемыми контейнером OSGI, а не поддерживает их в своем собственном контексте?
- personharschware; 11.06.2013
comment
Это прекрасно. У вас должен быть как минимум один DependencyManager для каждого пакета, но это потому, что он использует BundleContext, который вы передаете в конструкторе, и он не должен использоваться совместно между пакетами. Вы можете использовать более одного DependencyManager на пакет, если хотите. Это просто экземпляр, который содержит декларативные данные о компонентах и их зависимостях.
- personMarcel Offermans; 11.06.2013