.. _dependencies-label: Управление зависимостями =========================== Автозагрузка плагинов происходит на этапе инициализации ядра Аксиомы.ГИС (:class:`~axioma.core.Core`). При этом многие сервисы, которые требуются для работы плагинов еще не созданы. Для оповещения о готовности этих сервисов существует механизм управления зависимостями. Интерфейс базового класса :class:`~axioma.core.plugin.HasDependencies` позволяет регистрировать и получать доступ к зависимостям с помощью метода :meth:`~axioma.core.plugin.HasDependencies.createDependencyGetter`. Например: :: from axioma.core.plugin import * # Объявляем свой класс-расширение class MyExtension(axioma.core.plugin.Extension): def __init__(self): super().__init__() # Регистрируем зависимость от axioma.gui.Gui: self.gui = self.createDependencyGetter(axioma.gui.Gui) def createMyMapView(self, mymap): # Используем зависимость: mapView = self.gui().createMapView(mymap) ... return mapView # Регистрируем расширение для разрешения зависимостей ext = MyExtension() axioma.app.gui.prependExtension(ext) ... mapView = ext.createMyMapView(map) Зарегистрировать сервис, к которому можно получить доступ через механизм разрешения зависимостей, можно с помощью метода :meth:`~axioma.core.Core.registerService`. Зарегистрировать созданное расширение можно с помощью метода :meth:`~axioma.core.Core.prependExtension`. На данный момент механизм управления зависимостями оповещает о создании следующих сервисов: Для Аксиома.ГИС и Аксиома.Runtime: * :class:`axioma.core.Core` * :class:`axioma.render.Render` * :class:`axioma.gui.Gui` * :class:`axioma.core.plugin.PluginManager` * :class:`axioma.render.GeometryStyleManager` Только для Аксиома.ГИС: * :class:`axioma.core.dp.DataCatalogInterface` * :class:`axioma.app.MainWindow`