Управление зависимостями

Автозагрузка плагинов происходит на этапе инициализации ядра Аксиомы.ГИС (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")

На данный момент механизм управления зависимостями оповещает о создании следующих сервисов: