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

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


developers:tutorial:module

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
developers:tutorial:module [2018/10/11 20:14]
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 |Рисунок 3. Свойства проекта - Сборка}} +
-Откройте вкладку "​Отладка",​ в качестве действия при запуске выберите запуск внешней программы и укажите исполняемый файл программного комплекса. +
-{{ :​developers:​tutorial:​module:​debug_prop.png?​direct&​400 |Рисунок 4. Свойства проекта - Отладка}} +
-Откройте вкладку "​Подписывание",​ выберите подписать сборку и "<​Создать>"​ в качестве ключа строгого имени. В появившемся диалоге укажите имя файла ключей. Защищать файл ключей паролем не обязательно. +
-{{ :​developers:​tutorial:​module:​signing_prop2.png?​direct&​400 |Рисунок 5. Свойства проекта - Подписывание}} +
-Теперь необходимо добавить в проект ссылки на сборки программного комплекса,​ необходимые для создания собственных модулей. Сборки,​ которые нужно подключить это: +
-  * 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 |Рисунок 6. Добавление ссылки через контекстное меню}} +
-Перейдите на вкладку "​Обзор",​ нажмите кнопку "​Обзор"​ и укажите необходимые файлы сборок. +
-{{ :​developers:​tutorial:​module:​browse_reference.png?​direct&​400 |Рисунок 7. Менеджер ссылок - Обзор}} +
-Кроме того необходимо подключить ссылки на системные сборки:​ +
-  * System.Drawing +
-  * System.Windows.Forms +
-Сделать это можно на вкладке "​Сборки"​ диалогового окна Менеджер ссылок. +
-{{ :​developers:​tutorial:​module:​system_reference.png?​direct&​400 |Рисунок 8. Менеджер ссылок - Сборки}} +
-После того как необходимые сборки подключены,​ нужно запретить их копирование при сборке вашего модуля. Для этого необходимо выделить все сборки программного комплекса в дереве структуры проекта,​ и поставить значение флага "​Копировать локально"​ в "​False"​.  +
-{{ :​developers:​tutorial:​module:​copy_local.png?​direct&​200 |Рисунок 9. Свойство копировать локально}}+
  
-Теперь проект готов к работе. Можно приступить ​к созданию ​Вашего первого модуляНеобходимо создать следующие элементы: ​+Создайте и настройте новый [[developers:​tutorial:​project|проект]] Visual Studio. 
 + 
 +Для ​создания и подключения модуля к программному комплексу [[http://​www.topomatic.ru|Топоматик Робур]] необходимо создать следующие элементы: ​
   * Класс реализующий функциональность модуля   * Класс реализующий функциональность модуля
   * Класс отвечающий за инициализацию модуля   * Класс отвечающий за инициализацию модуля
   * Файл для подключения к программному комплексу.   * Файл для подключения к программному комплексу.
  
-Начнем с создания класса,​ реализующего функциональность модуля. Это должен быть ​компонент, ​наследник от Topomatic.ApplicationPlatform.Module. Создайте новый класс компонента и назовите его "​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.Module. Также можно убрать его из общей области видимости.+Измените код класса,​ сделайте его наследником от [[developers:​references:​topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Также можно убрать его из общей области видимости.
 <code csharp> <code csharp>
-partial class Module : Topomatic.ApplicationPlatform.Module+partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator
 { {
-    ​public Module() +    ​//тут будут объявлены функции,​ реализующие нужный нам функционал
-    { +
-       ​InitializeComponent();​ +
-    } +
-     +
-    public Module(IContainer container) +
-    { +
-        container.Add(this);​ +
-        InitializeComponent();​ +
-    }+
 } }
 </​code>​ </​code>​
  
-Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса ​Topomatic.ApplicationPlatform.PluginHost ​и находится в общей области видимости. У него необходимо реализовать ​абстрактное свойство PluginName, возвращающее имя вашего плагина,​ и абстрактную функцию ​GetModules() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего компонента.+Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса ​[[developers:​references:​topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] ​и находится в общей области видимости. У него необходимо реализовать абстрактную функцию ​GetTypes() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего класса Module.
  
-Создайте новый класс и назовите его "​ModulePluginHost"​. Наследуйте класс от Topomatic.ApplicationPlatform.PluginHost ​и реализуйте функции как описано выше.+Создайте новый класс и назовите его "​ModulePluginHost"​. Наследуйте класс от [[developers:​references:​topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] ​и реализуйте функции как описано выше.
 <code csharp> <code csharp>
-public class ModulePluginHost : Topomatic.ApplicationPlatform.PluginHost+public class ModulePluginHost : Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator
 { {
-    //тут мы возвращаем строку с именем нашего плагина 
-    public override string PluginName 
-    { 
-        get 
-        { 
-            return "My first module";​ 
-        } 
-    } 
- 
     //тут мы возвращаем типы всех модулей,​ которые хотим подключить,​ в нашем примере только один тип     //тут мы возвращаем типы всех модулей,​ которые хотим подключить,​ в нашем примере только один тип
-    protected override Type[] ​GetModules()+    protected override Type[] ​GetTypes()
     {     {
         return new Type[] { typeof(Module) };         return new Type[] { typeof(Module) };
Строка 76: Строка 33:
 } }
 </​code>​ </​code>​
-Для подключения нашей ​сборки к программному комплексу нам необходим файл Имя нашей ​сборки.AddIn.  +Для подключения нашей библиотеки к программному комплексу нам необходим файл ​"Имя нашей библиотеки".plugin.  
-<​note>​Здесь и далее замените **Имя нашей ​сборки**, на имя вашего проекта,​ в примере это **tutorial1**</​note>​ +<​note>​Здесь и далее замените **"Имя нашей библиотеки"**, на имя вашего проекта,​ в примере это **tutorial1**</​note>​ 
-Это ​файл в формате ​[[https://ru.wikipedia.org/​wiki/​XML|XML]] который содержит инструкции для программного комплекса,​ позволяющие загрузить и подключить модули,​ содержащиеся в нашей сборке. +Это [[developers:references:​core.plugin|файл]]который содержит инструкции для программного комплекса,​ позволяющие загрузить и подключить модули,​ содержащиеся в нашей сборке. 
-Создайте новый файл и назовите его Имя нашей ​сборки.AddIn.+Создайте новый файл и назовите его ​"Имя нашей библиотеки".plugin.
 Для этого выберите в контекстном меню проекта "​Создать элемент..."​. Для этого выберите в контекстном меню проекта "​Создать элемент..."​.
 {{ :​developers:​tutorial:​module:​add_addin.png?​direct&​400 |Рисунок 12. Создание элемента}} {{ :​developers:​tutorial:​module:​add_addin.png?​direct&​400 |Рисунок 12. Создание элемента}}
-В диалоге добавления нового элемента выберите ​XML-файл. +В диалоге добавления нового элемента выберите ​текстовый ​файл. 
-{{ :​developers:​tutorial:​module:​add_addin2.png?​direct&​400 |Рисунок 13. Выбор ​XML файла}} +{{ :​developers:​tutorial:​module:​add_addin2.png?​direct&​400 |Рисунок 13. Выбор ​текстового ​файла}} 
-Выберите созданный файл в структуре проекта,​ и назначьте свойству "​Копировать в выходной каталог"​ значение "​Всегда копировать",​ чтобы всегда копировать этот файл в каталог куда Вы собираете Вашу ​сборку.+Выберите созданный файл в структуре проекта,​ и назначьте свойству "​Копировать в выходной каталог"​ значение "​Всегда копировать",​ чтобы всегда копировать этот файл в каталог куда Вы собираете Вашу библиотеку.
 {{ :​developers:​tutorial:​module:​always_copy.png?​direct&​200 |Рисунок 14. Копирование в выходной каталог}} {{ :​developers:​tutorial:​module:​always_copy.png?​direct&​200 |Рисунок 14. Копирование в выходной каталог}}
 Заполните созданный файл, как показано ниже. Заполните созданный файл, как показано ниже.
-<​code ​xml+<​code ​javascript
-<?xml version="​1.0"​ encoding="​utf-8"​ ?>  +{ 
-<​Extensibility FileVersion="1"+  "assemblies": { 
-  <​Addin>​ +    ​"​Имя нашей библиотеки": { 
-    ​<​FriendlyName>​Тестовый модуль урок 1</​FriendlyName>​ +        "assembly""​Имя нашей библиотеки.dllИмя нашей библиотеки.ModulePluginHost"​ 
-    <​Description></​Description>​ +        } 
-    <​TargetPlaform Name="" ​Version="​15.0"/>​ +    } 
-    <​Assembly Name="​Имя нашей ​сборки.dll" FullClassName="​Имя нашей ​сборки.ModulePluginHost" ​/> +}
-  </​Addin>​ +
-</​Extensibility>​+
 </​code>​ </​code>​
-Тэги ​''​<​FriendlyName>​'' ​и ''<​Description>''​ это имя и описание плагина, которые будут показаны пользователю. Тэг ''<​TargetPlaform>'' ​указывает версию платформы для которой ​собирается модуль, на текущий момент версия 15. Тэг ​''​<​Assembly>​'' ​отвечает ​за подключение сборкив атрибуте ''​Name''​ указывается имя сборки, а в атрибут ''​FullClassName''​ - полное имя класса,​ наследника от PluginHost, включая его пространство имён. +Элемент ​''​assemblies''​ определяет какие сборки будут подключены к программному комплексу и может содержать один или несколько элементов ''​assembly''​. В нашем случае ​этот элемент один и представляет из себя строкусодержащую, через ​запятую имя сборки и полное имя класса,​ наследника от [[developers:​references:​topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]], включая его пространство имен.
-Если необходимо подключить ​несколько сборок,​ можно указать несколько тэгов ''<​Assembly>''​.+
  
 Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин,​ подключающий наш модуль к программному комплексу Топоматик Робур. ​ Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин,​ подключающий наш модуль к программному комплексу Топоматик Робур. ​
  
-Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "Module" и перекроем в нём метод ​OnCreateApplication ​как показано ниже.+Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "ModulePluginHost" и перекроем в нём метод ​[[developers:​references:​topomatic.applicationplatform.plugins.plugininitializator.initialize|Initialize]] ​как показано ниже.
 <code csharp> <code csharp>
     //этот метод будет вызван в момент старта программного комплекса     //этот метод будет вызван в момент старта программного комплекса
-    ​protected ​override void OnCreateApplication(object sender, CreateApplicationEventArgs e)+    ​//при первой инициализации вашего модуля 
 +    //​после этого модуль будет закэширован 
 +    public ​override void Initialize(PluginFactory factory)
     {     {
-        base.OnCreateApplication(sender, e);+        base.Initialize(factory);
         //​вызов этого метода покажет стандартный диалог с сообщением         //​вызов этого метода покажет стандартный диалог с сообщением
         MessageDlg.Show("​Привет Робур"​);​         MessageDlg.Show("​Привет Робур"​);​
     }     }
 </​code>​ </​code>​
-Этот метод будет вызван при старте программного комплекса, а мы покажем там сообщение,​ в котором будет написано "​Привет Робур"​. +Этот метод будет вызван при старте программного комплекса ​и мы покажем там сообщение,​ в котором будет написано "​Привет Робур"​. 
-<​note>​Для того чтобы ​испоьзовать методы статического класса MessageDlg и класс CreateApplicationEventArgs ​необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав правой клавишей на имени класса ​и выбрав ​добавление ​директивы using.</​note>​ +Сообщение будет вызвано при ​старте в момент первой инициализации модуля, потом он будет ​сохранен и инициализация модуля ​будет вызываться по требованию. Если необходимо сбросить информацию ​о сохраненных модулях, можно воспользоваться командой "​clearcache"​ доступной в командной строке.
-Теперь мы можем запустить наш ​проект. Он автоматически соберет нашу сборку в каталог с программным ​комплексом,​ скопирует туда же файл AddIn и запустит исполняемый файл программного комплекса, при ​старте ​которого мы увидим наше сообщение. +
-{{ :​developers:​tutorial:​module:​hello.png?​direct&​400 |Рисунок ​15. Сообщение - Привет Робур}}+
  
-<​note>​Исходный код примеравы можете ​скачать используя эту ссылку ​+<​note>​Для того чтобы использовать методы статического класса [[developers:​references:​topomatic.controls.dialogs.messagedlg|MessageDlg]] необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав ​правой клавишей на имени класса и выбрав добавление директивы using.</​note>​ 
 +Теперь мы можем запустить наш проект. Он автоматически соберет нашу сборку в каталог ​с программным комплексом, скопирует туда же файл plugin и запустит исполняемый файл программного ​комплекса,​ при старте которого мы увидим наше сообщение. 
 +{{ :​developers:​tutorial:​module:​hello.png?​direct&​400 |Рисунок 15. Сообщение - Привет Робур}}
  
-{{ :developers:​tutorial:​module:​tutorial1.zip ​|Архив ​с кодом примера}}</​note>​+<​note>​[[developers:​tutorial:​tutorialcode|Исходный код]] примера ​расположен в проекте **"​tutorial1"​**.</​note>​
  
  
  
developers/tutorial/module.1539288896.txt.gz · Последние изменения: 2021/07/22 14:28 (внешнее изменение)