Инструменты пользователя

Инструменты сайта


developers:tutorial:module

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
developers:tutorial:module [2018/10/11 19:29]
vasya
developers:tutorial:module [2022/03/15 19:10] (текущий)
proxor
Строка 1: Строка 1:
-====== Создание и подключение первого модуля ====== +====== Создание первого модуля ======
-Запустите редактор Visual Studio, выберите создание нового проекта. В качестве шаблона используйте "​Классическое приложение для Windows",​ а в качестве типа "​Библиотека классов (.NET Framework)"​. В качестве платформы укажите ".NET Framework 3.5"​. +
-{{ :​developers:​tutorial:​module:​create_project.png?​direct&​400 |Рис. 1 Создание проекта}} +
-Настроим проект так, чтобы он собирался в каталог с программным комплексом Топоматик Робур, запускал его при отладке и добавим к проекту цифровую подпись. Для этого перейдите в свойства проекта. +
-{{ :​developers:​tutorial:​module:​project_properties.png?​direct&​400 |Рис. 2 Свойства проекта }} +
-Откройте вкладку "​Сборка",​ в качестве выходного пути для всех конфигураций выберите каталог с программным комплексом Топоматик Робур.  +
-{{ :​developers:​tutorial:​module:​build_prop.png?​direct&​400 |}} +
-Откройте вкладку "​Отладка",​ в качестве действия при запуске выберите запуск внешней программы и укажите исполняемый файл программного комплекса. +
-{{ :​developers:​tutorial:​module:​debug_prop.png?​direct&​400 |}} +
-Откройте вкладку "​Подписывание",​ выберите подписать сборку и "<​Создать>"​ в качестве ключа строгого имени. В появившемся диалоге укажите имя файла ключей. Защищать файл ключей паролем не обязательно. +
-{{ :​developers:​tutorial:​module:​signing_prop2.png?​direct&​400 |}} +
-Теперь необходимо добавить в проект ссылки на сборки программного комплекса,​ необходимые для создания собственных модулей. Сборки,​ которые нужно подключить это: +
-  * Topomatic.ApplicationPlatform.dll +
-  * Topomatic.Controls.dll +
-  * Topomatic.FoundationClasses.dll +
-  * Topomatic.Stg.dll +
-<​note>​Первые три сборки находятся в каталоге с программным комплексом,​ а сборка Topomatic.Stg.dll находится в глобальном кэше сборок (C:​\Windows\assembly\GAC_MSIL\Topomatic.Stg\).</​note>​ +
-Откройте диалоговое окно Менеджер ссылок. +
-{{ :​developers:​tutorial:​module:​add_reference.png?​direct&​400 |}} +
-Перейдите на вкладку "​Обзор",​ нажмите кнопку "​Обзор"​ и укажите необходимые файлы сборок. +
-{{ :​developers:​tutorial:​module:​browse_reference.png?​direct&​400 |}} +
-Кроме того необходимо подключить ссылки на системные сборки:​ +
-  * System.Drawing +
-  * System.Windows.Forms +
-Сделать это можно на вкладке "​Сборки"​ диалогового окна Менеджер ссылок. +
-{{ :​developers:​tutorial:​module:​system_reference.png?​direct&​400 |}} +
-После того как необходимые сборки подключены,​ нужно запретить их копирование при сборке вашего модуля. Для этого необходимо выделить все сборки программного комплекса в дереве структуры проекта,​ и поставить значение флага "​Копировать локально"​ в "​False"​.  +
-{{ :​developers:​tutorial:​module:​copy_local.png?​direct&​200 |}}+
  
-Теперь проект готов к работе. Можно приступить ​к созданию ​Вашего первого модуляНеобходимо создать следующие элементы: ​+Создайте и настройте новый [[developers:​tutorial:​project|проект]] Visual Studio. 
 + 
 +Для ​создания и подключения модуля к программному комплексу [[http://​www.topomatic.ru|Топоматик Робур]] необходимо создать следующие элементы: ​
   * Класс реализующий функциональность модуля   * Класс реализующий функциональность модуля
   * Класс отвечающий за инициализацию модуля   * Класс отвечающий за инициализацию модуля
   * Файл для подключения к программному комплексу.   * Файл для подключения к программному комплексу.
  
-Начнем с создания класса,​ реализующего функциональность модуля. Это должен быть компонент,​ наследник от Topomatic.ApplicationPlatform.Module+Начнем с создания класса,​ реализующего функциональность модуля. Это должен быть ​наследник от [[developers:​references:​topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Создайте новый класс ​компонента и назовите его "​Module"​. 
 +{{ :​developers:​tutorial:​module:​add_component.png?​direct&​400 |Рисунок 10. Создание компонента}} 
 +Откройте окно редактирования кода компонента. 
 +{{ :​developers:​tutorial:​module:​goto_code.png?​direct&​400 |Рисунок 11. Перейти к коду компонента}} 
 +Измените код классасделайте его ​наследником от [[developers:​references:​topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Также можно убрать его из общей области видимости. 
 +<code csharp>​ 
 +partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator 
 +
 +    //тут будут объявлены функции,​ реализующие нужный нам функционал 
 +
 +</​code>​ 
 + 
 +Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса [[developers:​references:​topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и находится в общей области видимости. У него необходимо реализовать абстрактную функцию GetTypes() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего класса ​Module
 + 
 +Создайте новый класс и назовите его "​ModulePluginHost"​. Наследуйте класс от [[developers:​references:​topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и реализуйте функции как описано выше. 
 +<code csharp>​ 
 +public class ModulePluginHost : Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator 
 +
 +    //тут мы возвращаем типы всех модулей,​ которые хотим подключить,​ в нашем примере только один тип 
 +    protected override Type[] GetTypes() 
 +    { 
 +        return new Type[] { typeof(Module) }; 
 +    } 
 +
 +</​code>​ 
 +Для подключения нашей библиотеки к программному комплексу нам необходим файл "​Имя нашей библиотеки"​.plugin.  
 +<​note>​Здесь и далее замените **"​Имя нашей библиотеки"​**,​ на имя вашего проекта,​ в примере это **tutorial1**</​note>​ 
 +Это [[developers:​references:​core.plugin|файл]],​ который содержит инструкции для программного комплекса,​ позволяющие загрузить и подключить модули,​ содержащиеся в нашей сборке. 
 +Создайте новый файл и назовите его "​Имя нашей библиотеки"​.plugin. 
 +Для этого выберите в контекстном меню проекта "​Создать элемент..."​. 
 +{{ :​developers:​tutorial:​module:​add_addin.png?​direct&​400 |Рисунок 12. Создание элемента}} 
 +В диалоге добавления нового элемента выберите текстовый файл. 
 +{{ :​developers:​tutorial:​module:​add_addin2.png?​direct&​400 |Рисунок 13. Выбор текстового файла}} 
 +Выберите созданный файл в структуре проекта,​ и назначьте свойству "​Копировать в выходной каталог"​ значение "​Всегда копировать",​ чтобы всегда копировать этот файл в каталог куда Вы собираете Вашу библиотеку. 
 +{{ :​developers:​tutorial:​module:​always_copy.png?​direct&​200 |Рисунок 14. Копирование в выходной каталог}} 
 +Заполните созданный файл, как показано ниже. 
 +<code javascript>​ 
 +
 +  "​assemblies":​ { 
 +    "​Имя нашей библиотеки":​ { 
 +        "​assembly":​ "​Имя нашей библиотеки.dll,​ Имя нашей библиотеки.ModulePluginHost"​ 
 +        } 
 +    } 
 +
 +</​code>​ 
 +Элемент ''​assemblies''​ определяет какие сборки будут подключены к программному комплексу и может содержать один или несколько элементов ''​assembly''​. В нашем случае этот элемент один и представляет из себя строку,​ содержащую,​ через запятую имя сборки и полное имя класса,​ наследника от [[developers:​references:​topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]],​ включая его пространство имен. 
 + 
 +Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин,​ подключающий наш модуль к программному комплексу Топоматик Робур.  
 + 
 +Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "​ModulePluginHost"​ и перекроем в нём метод [[developers:​references:​topomatic.applicationplatform.plugins.plugininitializator.initialize|Initialize]] как показано ниже. 
 +<code csharp>​ 
 +    //этот метод будет вызван в момент старта программного комплекса 
 +    //при первой инициализации вашего модуля 
 +    //​после этого модуль будет закэширован 
 +    public override void Initialize(PluginFactory factory) 
 +    { 
 +        base.Initialize(factory);​ 
 +        //​вызов этого метода покажет стандартный диалог с сообщением 
 +        MessageDlg.Show("​Привет Робур"​);​ 
 +    } 
 +</​code>​ 
 +Этот метод будет вызван при старте программного комплекса и мы покажем там сообщение,​ в котором будет написано "​Привет Робур"​. 
 +Сообщение будет вызвано при старте в момент первой инициализации модуля,​ потом он будет сохранен и инициализация модуля будет вызываться по требованию. Если необходимо сбросить информацию о сохраненных модулях,​ можно воспользоваться командой "​clearcache"​ доступной в командной строке. 
 + 
 +<​note>​Для того чтобы использовать методы статического класса [[developers:​references:​topomatic.controls.dialogs.messagedlg|MessageDlg]] необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав правой клавишей на имени класса и выбрав добавление директивы using.</​note>​ 
 +Теперь мы можем запустить наш проект. Он автоматически соберет нашу сборку в каталог с программным комплексом,​ скопирует туда же файл plugin и запустит исполняемый файл программного комплекса,​ при старте которого мы увидим наше сообщение. 
 +{{ :​developers:​tutorial:​module:​hello.png?​direct&​400 |Рисунок 15. Сообщение - Привет Робур}} 
 + 
 +<​note>​[[developers:​tutorial:​tutorialcode|Исходный код]] примера расположен в проекте **"​tutorial1"​**.</​note>​ 
 + 
 + 
developers/tutorial/module.1539286164.txt.gz · Последние изменения: 2021/07/22 14:28 (внешнее изменение)