.. _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`.

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

* :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`
