Система Плагінів

Розширте переглядач за допомогою плагінів

Ядро Doconut залишається легким; додаткова функціональність постачається у вигляді плагінів — окремих пакетів NuGet, які додають переглядачі або сервіси і активуються вашою ліцензією. На цій сторінці пояснюється модель реєстрації, як працює обмеження ліцензії під час виконання, та як підключити власний переглядач.

Реєстрація плагіна

Кожен пакет плагіна надає один клас плагіна. Ви реєструєте його один раз під час запуску:

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

AddPlugin<TPlugin>() створює екземпляр плагіна та викликає його зворотний виклик Register у реєстрі плагінів, що зберігається в DoconutOptions. Все, що додає плагін, позначається необхідною можливістю плагіна. AddDoconut() негайно перевіряє зареєстровані плагіни: відсутня ліцензія, застарілий файл TRIAL або платна ліцензія без необхідної можливості призводять до помилки запуску з InvalidOperationException. Реєстрація Temporary/Demo зберігається після закінчення терміну, проте її можливості під час виконання відкликаються після дати закінчення.

Контракт

Плагін реалізує навмисно невеликий інтерфейс:

text
public interface IDoconutPlugin
{
    string Name { get; }                          // e.g. "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // the license gate
    void Register(IDoconutPluginBuilder builder); // contribute viewers/services
}

Усередині Register будівельник приймає два типи внесків:

  • builder.RegisterViewer(".dcm", () => new DicomViewer()) — переглядач для розширення файлу,
  • builder.RegisterService<TContract>(() => …) — типізований сервіс, який інші частини конвеєра можуть знайти.

Можливості та обмеження

Можливості — це одиниці ліцензії. Converter і Dicom постачаються як плагіни за вибором; Search і Annotation є вбудованими функціями, обмеженими тим же способом. Базовий переглядач не є можливістю — це передумова, представлена як IsViewerLicensed у сервісі ліцензії.

Перевірка під час запуску зазвичай запобігає входженню неліцензованого плагіна у конвеєр запитів. Фабрика переглядачів також застосовує два захисних правила під час виконання, які важливі, якщо права змінюються після запуску:

  • Плагін замінює вбудований переглядач (плагін заявляє розширення, яке також обробляє вбудований реєстр): при наявній ліцензійній можливості переглядач плагіна переважає; без неї Doconut тихо повертається до вбудованого переглядача. Користувачі все ще бачать свій документ — просто не отримують функцію плагіна.
  • Формат лише для плагіна (наприклад, .dcm — у DICOM немає вбудованого переглядача): без можливості виклик відкриття завершується з помилкою:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Активна тимчасова (Temporary) ліцензія надає всі можливості (з чистим, без водяних знаків базовим переглядом). Це класичне джерело несподіванок під час запуску: реєстрація тих самих плагінів з придбаною ліцензією, яка не включає одну з їх можливостей, призводить до помилки AddDoconut() під час запуску. Порівняйте IsCapabilityGranted(...) з вашим планом перед розгортанням. Навпаки: при відсутності будь-якої ліцензії нічого не надається — відсутня ліцензія не є тимчасовою ліцензією.

Те ж обмеження проявляється на боці клієнта: Viewer.ReferenceScripts() та ReferenceCss() генерують пакети скриптів/стилів для функцій, обмежених ліцензією (search, annotation, …) лише коли ліцензія їх дозволяє, тому інтерфейс віджету залишається узгодженим з тим, що сервер фактично виконує.

Карта функцій та плагінів

Інтерфейс продукту використовує “plugin” як широку мітку функції, але реєстрація на сервері відрізняється:

ФункціяЯк увімкненоМожливістьВносить
AnnotationВбудовано в переглядач; включає ресурси анотаціїAnnotationАвторинг у браузері, збереження сесії та експорт з вбудованою анотацією
SearchВбудовано у переглядачі форматів з підтримкою пошуку; включає ресурси пошуку та дозволяє витяг, коли це потрібноSearchРідний текстовий індекс, підсвічування та навігація результатами
ConverterВстановіть Doconut.NET8.Converter та зареєструйте ConverterPluginConverterC# сервіс конвертації та необов'язковий веб-виджет
DICOMВстановіть Doconut.NET8.Dicom та зареєструйте DicomPluginDicomПерегляд медичних зображень для .dcm та .ima

Випущені пакети плагінів

ПлагінПакетМожливістьВносить
ConverterDoconut.NET8.ConverterConverterМожливість конвертації документів
DICOMDoconut.NET8.DicomDicomПерегляд медичних зображень (.dcm — формат лише для плагіна)

Кожен має окрему сторінку в розділі Plugins з його налаштуваннями та використанням.

Кастомні переглядачі — ваш власний обробник формату

Ви можете підключити переглядач до конвеєра без створення пакету плагіна, безпосередньо з Program.cs:

text
builder.Services.AddDoconut(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),               // implements IFormatViewer
        () => new ImageConfig { ImageResolution = 150 }); // optional default config
});

Кастомні переглядачі мають пріоритет над усім — як вбудованими, так і плагінами — і не підлягають обмеженню ліцензії (це ваш код). Фабрика повертається до ImageConfig, якщо ви не надаєте конфігурацію за замовчуванням.

Висновки

  • Плагіни реєструються явно, і їх LicenseCapability перевіряється під час AddDoconut() — відсутність або недостатність прав, не тимчасових, швидко призводить до помилки.
  • Плагіни, що замінюють вбудовані, деградують плавно; формати лише для плагіна завершуються помилкою LicenseException.
  • Активна тимчасова ліцензія відкриває все; у продакшн-режимі відкривається те, що ви придбали. Перевірте за допомогою IDoconutLicenseService перед випуском.

Чи була ця сторінка корисною?