====== Создание первого модуля ====== Создайте и настройте новый [[developers:tutorial:project|проект]] Visual Studio. Для создания и подключения модуля к программному комплексу [[http://www.topomatic.ru|Топоматик Робур]] необходимо создать следующие элементы: * Класс реализующий функциональность модуля * Класс отвечающий за инициализацию модуля * Файл для подключения к программному комплексу. Начнем с создания класса, реализующего функциональность модуля. Это должен быть наследник от [[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]]. Также можно убрать его из общей области видимости. partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator { //тут будут объявлены функции, реализующие нужный нам функционал } Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и находится в общей области видимости. У него необходимо реализовать абстрактную функцию GetTypes() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего класса Module. Создайте новый класс и назовите его "ModulePluginHost". Наследуйте класс от [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и реализуйте функции как описано выше. public class ModulePluginHost : Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator { //тут мы возвращаем типы всех модулей, которые хотим подключить, в нашем примере только один тип protected override Type[] GetTypes() { return new Type[] { typeof(Module) }; } } Для подключения нашей библиотеки к программному комплексу нам необходим файл "Имя нашей библиотеки".plugin. Здесь и далее замените **"Имя нашей библиотеки"**, на имя вашего проекта, в примере это **tutorial1** Это [[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. Копирование в выходной каталог}} Заполните созданный файл, как показано ниже. { "assemblies": { "Имя нашей библиотеки": { "assembly": "Имя нашей библиотеки.dll, Имя нашей библиотеки.ModulePluginHost" } } } Элемент ''assemblies'' определяет какие сборки будут подключены к программному комплексу и может содержать один или несколько элементов ''assembly''. В нашем случае этот элемент один и представляет из себя строку, содержащую, через запятую имя сборки и полное имя класса, наследника от [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]], включая его пространство имен. Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин, подключающий наш модуль к программному комплексу Топоматик Робур. Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "ModulePluginHost" и перекроем в нём метод [[developers:references:topomatic.applicationplatform.plugins.plugininitializator.initialize|Initialize]] как показано ниже. //этот метод будет вызван в момент старта программного комплекса //при первой инициализации вашего модуля //после этого модуль будет закэширован public override void Initialize(PluginFactory factory) { base.Initialize(factory); //вызов этого метода покажет стандартный диалог с сообщением MessageDlg.Show("Привет Робур"); } Этот метод будет вызван при старте программного комплекса и мы покажем там сообщение, в котором будет написано "Привет Робур". Сообщение будет вызвано при старте в момент первой инициализации модуля, потом он будет сохранен и инициализация модуля будет вызываться по требованию. Если необходимо сбросить информацию о сохраненных модулях, можно воспользоваться командой "clearcache" доступной в командной строке. Для того чтобы использовать методы статического класса [[developers:references:topomatic.controls.dialogs.messagedlg|MessageDlg]] необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав правой клавишей на имени класса и выбрав добавление директивы using. Теперь мы можем запустить наш проект. Он автоматически соберет нашу сборку в каталог с программным комплексом, скопирует туда же файл plugin и запустит исполняемый файл программного комплекса, при старте которого мы увидим наше сообщение. {{ :developers:tutorial:module:hello.png?direct&400 |Рисунок 15. Сообщение - Привет Робур}} [[developers:tutorial:tutorialcode|Исходный код]] примера расположен в проекте **"tutorial1"**.