Автозагрузка плагинов происходит на этапе инициализации ядра Аксиомы.ГИС
(Core
). При этом многие сервисы, которые требуются для
работы плагинов еще не созданы. Для оповещения о готовности этих сервисов
существует механизм управления зависимостями.
Интерфейс базового класса расширений Extension
позволяет
регистрировать зависимости с помощью метода addDependency()
.
Например:
ext = axioma.core.plugin.Extension()
ext.addDependency(axioma.app.MainWindow)
В данном случае расширение ext
будет загружено только после создания главного
окна приложения.
Как правило расширению необходимо не только дождаться инициализации какого-либо
объекта, но и пользоваться его интерфейсом. Для этого в метод addDependency()
можно передать еще один параметр - имя атрибута, по которому будет доступен
требуемый объект. Когда все зависимости расширения инициализированы, вызывается
метод onResolved()
. Подробнее о переопределении этого метода и оповещении о
готовности расширения в документации к базовому классу Extension
Пример расширения, которое открывает файл в главном окне после его инициализации:
class MyExtension(axioma.core.plugin.Extension):
def __init__(self):
super().__init__()
self.addDependency(axioma.app.MainWindow, "mainWindow")
def onResolved(self):
self.mainWindow.firstShow.connect(self.onMainWindowFirstShow)
def onMainWindowFirstShow(self):
self.mainWindow.openFile("path/to/my/file.tab")
На данный момент механизм управления зависимостями оповещает о создании следующих сервисов: