Система Плагінів
Розширте переглядач за допомогою плагінів
Ядро Doconut залишається легким; додаткова функціональність постачається у вигляді плагінів — окремих пакетів NuGet, які додають переглядачі або сервіси і активуються вашою ліцензією. На цій сторінці пояснюється модель реєстрації, як працює обмеження ліцензії під час виконання, та як підключити власний переглядач.
Реєстрація плагіна
Кожен пакет плагіна надає один клас плагіна. Ви реєструєте його один раз під час запуску:
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 зберігається після закінчення терміну, проте її можливості під час виконання відкликаються після дати закінчення.
Контракт
Плагін реалізує навмисно невеликий інтерфейс:
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 немає вбудованого переглядача): без можливості виклик відкриття завершується з помилкою:
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 та зареєструйте ConverterPlugin | Converter | C# сервіс конвертації та необов'язковий веб-виджет |
| DICOM | Встановіть Doconut.NET8.Dicom та зареєструйте DicomPlugin | Dicom | Перегляд медичних зображень для .dcm та .ima |
Випущені пакети плагінів
| Плагін | Пакет | Можливість | Вносить |
|---|---|---|---|
| Converter | Doconut.NET8.Converter | Converter | Можливість конвертації документів |
| DICOM | Doconut.NET8.Dicom | Dicom | Перегляд медичних зображень (.dcm — формат лише для плагіна) |
Кожен має окрему сторінку в розділі Plugins з його налаштуваннями та використанням.
Кастомні переглядачі — ваш власний обробник формату
Ви можете підключити переглядач до конвеєра без створення пакету плагіна, безпосередньо з Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // implements IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // optional default config
});Кастомні переглядачі мають пріоритет над усім — як вбудованими, так і плагінами — і не підлягають обмеженню ліцензії (це ваш код). Фабрика повертається до ImageConfig, якщо ви не надаєте конфігурацію за замовчуванням.
Висновки
- Плагіни реєструються явно, і їх
LicenseCapabilityперевіряється під часAddDoconut()— відсутність або недостатність прав, не тимчасових, швидко призводить до помилки. - Плагіни, що замінюють вбудовані, деградують плавно; формати лише для плагіна завершуються помилкою
LicenseException. - Активна тимчасова ліцензія відкриває все; у продакшн-режимі відкривається те, що ви придбали. Перевірте за допомогою
IDoconutLicenseServiceперед випуском.
Чи була ця сторінка корисною?