Как вы общаетесь между декларативными службами затмения и представлениями (ContentProviders) - PullRequest
4 голосов
/ 12 ноября 2008

Скажем, у вас есть плагин eclipse с различными представлениями, эти представления должны отображать данные из некоторого пакета OSGi, который передает данные в представления. Вместо того чтобы каждый вид взаимодействовал с пакетом OSGi, у меня есть промежуточный класс Facade, который действует как классная доска для представлений и управляет связью между представлениями и другим пакетом OSGi - ну, это теория.

Проблема возникает из-за того, что пакет пользовательского интерфейса (вместе с представлениями и фасадом) связывается с другим пакетом (называемым хранилищем данных) с помощью декларативных служб. Поскольку хранилище данных получает асинхронные обновления данных из еще одного источника, ему необходимо отправить содержимое на фасад (и в другие пакеты, если они доступны). OSGi создает экземпляр Facade для удовлетворения требований количества элементов в конфигурации DS хранилища данных, но экземпляры создаются реализацией IApplication подключаемого модуля. Даже если IApplication и Facade - это один и тот же класс, я получаю два отдельных экземпляра, которые не знают друг друга.

Как включить связь между этими компонентами (плагин Application, Views и т. Д. И OSGi-экземпляр Facade)?

Ответы [ 2 ]

1 голос
/ 13 ноября 2008

вы также можете использовать Spring DM для подключения ваших служб OSGi и использовать клейкий плагин Martin Lippert для подключения представлений к OSGi Services (или Spring beans), что немаловажно это означает, что вам не нужно писать какой-либо код на основе API службы или API Spring ...

1 голос
/ 12 ноября 2008

Одним из решений является использование Singleton и наличие одного или обоих регистров Application и Facade с этим Singleton.

Однако, мне действительно не нравится идея выбросить глобальную переменную в этой проблеме. Кажется, это не имеет смысла - это должно быть распространенной проблемой, поэтому я предполагаю, что есть элегантное решение, и я просто не знаю, как его искать.

...