Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
developers:tutorial:module [2018/12/23 17:35] vasya |
developers:tutorial:module [2022/03/15 19:10] (текущий) proxor |
||
---|---|---|---|
Строка 8: | Строка 8: | ||
* Файл для подключения к программному комплексу. | * Файл для подключения к программному комплексу. | ||
- | Начнем с создания класса, реализующего функциональность модуля. Это должен быть компонент, наследник от Topomatic.ApplicationPlatform.Plugins.PluginInitializator. Создайте новый класс компонента и назовите его "Module". | + | Начнем с создания класса, реализующего функциональность модуля. Это должен быть наследник от [[developers:references:topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Создайте новый класс компонента и назовите его "Module". |
{{ :developers:tutorial:module:add_component.png?direct&400 |Рисунок 10. Создание компонента}} | {{ :developers:tutorial:module:add_component.png?direct&400 |Рисунок 10. Создание компонента}} | ||
Откройте окно редактирования кода компонента. | Откройте окно редактирования кода компонента. | ||
{{ :developers:tutorial:module:goto_code.png?direct&400 |Рисунок 11. Перейти к коду компонента}} | {{ :developers:tutorial:module:goto_code.png?direct&400 |Рисунок 11. Перейти к коду компонента}} | ||
- | Измените код класса, сделайте его наследником от Topomatic.ApplicationPlatform.Plugins.PluginInitializator. Также можно убрать его из общей области видимости. | + | Измените код класса, сделайте его наследником от [[developers:references:topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Также можно убрать его из общей области видимости. |
<code csharp> | <code csharp> | ||
partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator | partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator | ||
Строка 20: | Строка 20: | ||
</code> | </code> | ||
- | Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator и находится в общей области видимости. У него необходимо реализовать абстрактную функцию GetTypes() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего класса Module. | + | Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и находится в общей области видимости. У него необходимо реализовать абстрактную функцию GetTypes() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего класса Module. |
- | Создайте новый класс и назовите его "ModulePluginHost". Наследуйте класс от Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator и реализуйте функции как описано выше. | + | Создайте новый класс и назовите его "ModulePluginHost". Наследуйте класс от [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и реализуйте функции как описано выше. |
<code csharp> | <code csharp> | ||
public class ModulePluginHost : Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator | public class ModulePluginHost : Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator | ||
Строка 35: | Строка 35: | ||
Для подключения нашей библиотеки к программному комплексу нам необходим файл "Имя нашей библиотеки".plugin. | Для подключения нашей библиотеки к программному комплексу нам необходим файл "Имя нашей библиотеки".plugin. | ||
<note>Здесь и далее замените **"Имя нашей библиотеки"**, на имя вашего проекта, в примере это **tutorial1**</note> | <note>Здесь и далее замените **"Имя нашей библиотеки"**, на имя вашего проекта, в примере это **tutorial1**</note> | ||
- | Это файл в формате [[https://ru.wikipedia.org/wiki/JSON|JSON]] который содержит инструкции для программного комплекса, позволяющие загрузить и подключить модули, содержащиеся в нашей сборке. | + | Это [[developers:references:core.plugin|файл]], который содержит инструкции для программного комплекса, позволяющие загрузить и подключить модули, содержащиеся в нашей сборке. |
Создайте новый файл и назовите его "Имя нашей библиотеки".plugin. | Создайте новый файл и назовите его "Имя нашей библиотеки".plugin. | ||
Для этого выберите в контекстном меню проекта "Создать элемент...". | Для этого выберите в контекстном меню проекта "Создать элемент...". | ||
Строка 48: | Строка 48: | ||
"assemblies": { | "assemblies": { | ||
"Имя нашей библиотеки": { | "Имя нашей библиотеки": { | ||
- | "assembly": "Имя нашей библиотеки.dll, Имя нашей библиотеки.ModulePluginHost" | + | "assembly": "Имя нашей библиотеки.dll, Имя нашей библиотеки.ModulePluginHost" |
+ | } | ||
} | } | ||
} | } | ||
</code> | </code> | ||
- | Элемент ''assemblies'' определяет какие сборки будут подключены к программному комплексу и может содержать один или несколько элементов ''assembly''. В нашем случае этот элемент один и представляет из себя строку, содержащую, через запятую имя сборки и полное имя класса, наследника от PluginHostInitializator, включая его пространство имен. | + | Элемент ''assemblies'' определяет какие сборки будут подключены к программному комплексу и может содержать один или несколько элементов ''assembly''. В нашем случае этот элемент один и представляет из себя строку, содержащую, через запятую имя сборки и полное имя класса, наследника от [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]], включая его пространство имен. |
Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин, подключающий наш модуль к программному комплексу Топоматик Робур. | Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин, подключающий наш модуль к программному комплексу Топоматик Робур. | ||
- | Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "ModulePluginHost" и перекроем в нём метод Initializeкак показано ниже. | + | Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "ModulePluginHost" и перекроем в нём метод [[developers:references:topomatic.applicationplatform.plugins.plugininitializator.initialize|Initialize]] как показано ниже. |
<code csharp> | <code csharp> | ||
//этот метод будет вызван в момент старта программного комплекса | //этот метод будет вызван в момент старта программного комплекса | ||
+ | //при первой инициализации вашего модуля | ||
+ | //после этого модуль будет закэширован | ||
public override void Initialize(PluginFactory factory) | public override void Initialize(PluginFactory factory) | ||
{ | { | ||
Строка 66: | Строка 69: | ||
} | } | ||
</code> | </code> | ||
- | Этот метод будет вызван при старте программного комплекса, а мы покажем там сообщение, в котором будет написано "Привет Робур". | + | Этот метод будет вызван при старте программного комплекса и мы покажем там сообщение, в котором будет написано "Привет Робур". |
+ | Сообщение будет вызвано при старте в момент первой инициализации модуля, потом он будет сохранен и инициализация модуля будет вызываться по требованию. Если необходимо сбросить информацию о сохраненных модулях, можно воспользоваться командой "clearcache" доступной в командной строке. | ||
<note>Для того чтобы использовать методы статического класса [[developers:references:topomatic.controls.dialogs.messagedlg|MessageDlg]] необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав правой клавишей на имени класса и выбрав добавление директивы using.</note> | <note>Для того чтобы использовать методы статического класса [[developers:references:topomatic.controls.dialogs.messagedlg|MessageDlg]] необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав правой клавишей на имени класса и выбрав добавление директивы using.</note> | ||
Теперь мы можем запустить наш проект. Он автоматически соберет нашу сборку в каталог с программным комплексом, скопирует туда же файл plugin и запустит исполняемый файл программного комплекса, при старте которого мы увидим наше сообщение. | Теперь мы можем запустить наш проект. Он автоматически соберет нашу сборку в каталог с программным комплексом, скопирует туда же файл plugin и запустит исполняемый файл программного комплекса, при старте которого мы увидим наше сообщение. | ||
{{ :developers:tutorial:module:hello.png?direct&400 |Рисунок 15. Сообщение - Привет Робур}} | {{ :developers:tutorial:module:hello.png?direct&400 |Рисунок 15. Сообщение - Привет Робур}} | ||
- | <note>Исходный код примера, вы можете скачать используя эту ссылку | + | <note>[[developers:tutorial:tutorialcode|Исходный код]] примера расположен в проекте **"tutorial1"**.</note> |
- | + | ||
- | {{ :developers:tutorial:module:tutorial1.zip |Архив с кодом примера}}</note> | + | |