Добавить в корзинуПозвонить
Найти в Дзене
IT4BIM

Эффективное логирование и внедрение зависимостей в Revit-плагине: лучшие практики для десктоп-приложений

Разработка плагинов для Revit – задача, требующая не только понимания API платформы, но и грамотной архитектуры кода. Чем сложнее плагин, тем важнее правильно организовать его структуру, особенно если он взаимодействует с различными сервисами, базами данных или выполняет сложные вычисления. В этой статье мы рассмотрим, как внедрить логирование и внедрение зависимостей (Dependency Injection, DI) в плагин для Revit. Эти инструменты помогают сделать код более модульным, гибким и удобным для отладки. Мы настроим Seq для удобного логирования, создадим Host для управления зависимостями и реализуем пример сервиса экспорта данных в БД с логированием. В результате вы получите шаблон, который можно использовать в любых Revit-плагинах или десктоп-приложениях, где требуется логирование и работа с зависимостями. Одной из ключевых частей разработки является логирование – оно позволяет отслеживать работу плагина, находить ошибки и анализировать его производительность. Для этих целей отлично подходит
Оглавление

Введение

Разработка плагинов для Revit – задача, требующая не только понимания API платформы, но и грамотной архитектуры кода. Чем сложнее плагин, тем важнее правильно организовать его структуру, особенно если он взаимодействует с различными сервисами, базами данных или выполняет сложные вычисления.

В этой статье мы рассмотрим, как внедрить логирование и внедрение зависимостей (Dependency Injection, DI) в плагин для Revit. Эти инструменты помогают сделать код более модульным, гибким и удобным для отладки.

Мы настроим Seq для удобного логирования, создадим Host для управления зависимостями и реализуем пример сервиса экспорта данных в БД с логированием. В результате вы получите шаблон, который можно использовать в любых Revit-плагинах или десктоп-приложениях, где требуется логирование и работа с зависимостями.

Настройка локального логирования с Seq

Одной из ключевых частей разработки является логирование – оно позволяет отслеживать работу плагина, находить ошибки и анализировать его производительность.

Для этих целей отлично подходит Seq – мощный инструмент для сбора и анализа логов. Он предоставляет удобный веб-интерфейс, где можно фильтровать и анализировать логи в реальном времени.

Установка и настройка Seq

  1. Скачайте и установите Seq по этой ссылке.
  2. Запустите Seq и откройте его веб-интерфейс.
-2

3. Перейдите в настройки и сгенерируйте токен для доступа.

-3

4. Сохраните токен, так как он понадобится при настройке логирования в коде.

-4

Токен в моем случае это “r8prOJJXAcMu53FfY8VA”. Он нам в дальнейшем пригодится, поэтому не забывайте его.

Теперь Seq готов к приему логов, и мы можем переходить к следующему этапу – созданию Host.

Реализация Host и DI

Что такое Host и зачем он нужен?

В Revit-плагинах удобно использовать подход DI, который позволяет управлять зависимостями и делает код более гибким. В качестве основного контейнера для зависимостей мы создадим Host, который:

-5

Регистрирует сервисы и управляет их временем жизни.

  • Инициализирует логирование.
  • Позволяет получать нужные сервисы в любом месте кода.

После его создания мы зарегистрируем его в IExternalApplication.

-6

Для загрузки зависимостей мы используем ResolveHelper – он помогает подтягивать зависимости от других dll из папки с плагином (решает проблему dependency hell). Это особенно полезно, если у вас есть дополнительные библиотеки, которые нужно динамически загружать. За основу можно взять пример у Nice3Point.

После этого можно добавлять кнопку в панель инструментов, чтобы запускать наш плагин.

Реализация IDataExporter

Теперь создадим сервис экспорта данных в БД. Он реализует интерфейс IDataExporter и может его реализации могут работать с разными СУБД.

-7

Мы сделаем две реализации:

-8

Для MySQL

-9

В каждой из них просто будет логироваться факт начала и окончания экспорта.

Метод расширения для экспорта

Чтобы удобно вызывать экспорт, создадим метод расширения, который передает данные в нужную базу. Это сделает код чище и удобнее.

-10

Вызов экспорта в IExternalCommand

-11

Когда плагин выполняет команду, нам нужно получить зарегистрированный сервис, после передать в него нужный документ и запустить экспорт.

Логирование событий

Так как мы зарегистрировали логгер в Host, он будет доступен во всех сервисах. Это позволит записывать ключевые события в процессе работы.

Пример логов:

-12

Таким образом, в Seq будет отображаться вся важная информация о работе плагина. А при подмене реализации IDataExporter мы увидим и изменения в логировании, можете попробовать и поэкспериментировать сами.

Полезный ссылки:

di+mvvm

di на примере RevitLookup

Отличный канал с лучшими практиками

Вывод

В этой статье мы разобрали, как правильно организовать логирование и внедрение зависимостей в Revit-плагине.

Мы научились:

Настраивать Seq для сбора логов.

Создавать Host и управлять зависимостями через DI.

Регистрировать сервисы и использовать их в Revit-командах.

Настраивать логирование в сервисах, таких как экспорт данных в БД.

Этот подход позволяет писать чистый, удобный в поддержке код, где каждый сервис легко тестируется и отлаживается.

В будущих статьях я расскажу, как удобно добавлять кнопки в панель инструментов Revit и какие еще полезные инструменты можно использовать для разработки Revit-плагинов. 🚀