Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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> | ||
+ | |||
+ |