Система плагінів
Розширте переглядач за допомогою плагінів
Ядро Doconut залишається легким; додаткова функціональність постачається у вигляді плагінів — окремих пакетів NuGet, які додають переглядачі або сервіси і активуються вашою ліцензією. На цій сторінці пояснюється модель реєстрації, як працює обмеження ліцензії під час виконання та як підключити власний переглядач.
Ця модель нова у цьому випуску. У попередній бібліотеці .NET Standard не було реєстру плагінів: конвертація була вбудована у сам переглядач, а ліцензії на плагіни встановлювалися через статичні виклики Viewer.SetLicensePlugin(...). Жоден з цих підходів не є механізмом реєстрації.
Реєстрація плагіна
Кожен пакет плагіна містить один клас плагіна. Ви реєструєте його один раз під час запуску:
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; } // наприклад "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // ліцензійний шлюз
void Register(IDoconutPluginBuilder builder); // додати переглядачі/служби
}Всередині Register, будівельник приймає два типи внесків:
builder.RegisterViewer(extension, factory)— переглядач для розширення файлу; фабрика повертаєIFormatViewer(плагін DICOM реєструє.dcmта.imaтаким чином),builder.RegisterService<TContract>(() => …)— типізований сервіс, який інші частини конвеєра можуть знайти.
Можливості та обмеження
Можливості — це одиниці ліцензії. Converter та Dicom постачаються як плагіни за вибором; Search та Annotation є вбудованими функціями, обмеженими тим же способом. Базовий переглядач не є можливістю — це передумова, представлена як IsViewerLicensed у сервісі ліцензій.
Перевірка під час запуску зазвичай запобігає входженню непідписаного плагіна у конвеєр запитів. Фабрика переглядачів також застосовує два захисних правила під час виконання, які важливі, якщо права змінюються після запуску:
- Плагін замінює вбудований переглядач (плагін заявляє розширення, яке також обробляє вбудований реєстр): при наявності ліцензованої можливості, переглядач плагіна переважає; без неї Doconut тихо повертається до вбудованого переглядача. Користувачі все ще бачать свій документ — просто не отримують функціональність плагіна.
- Формат лише для плагіна (наприклад,
.dcm— у DICOM немає вбудованого переглядача): без можливості виклик відкриття завершується з помилкою:
LicenseException: This document type requires the 'Dicom' plugin license.Активна тимчасова ліцензія надає всі можливості (з чистим, без водяних знаків базовим переглядом). Це класичне джерело несподіванок під час запуску: реєстрація тих самих плагінів з придбаною ліцензією, яка пропускає одну з їх можливостей, призводить до збою AddDoconut() під час запуску. Порівняйте IsCapabilityGranted(...) зі своїм планом перед розгортанням. З іншого боку: без жодної ліцензії нічого не надається — відсутня ліцензія не є тимчасовою ліцензією.
Те ж обмеження проявляється на боці клієнта: Viewer.ReferenceScripts() та ReferenceCss() генерують скриптові/стилістичні пакети для функцій, обмежених ліцензією (пошук, анотація, …) лише коли ліцензія їх увімкне, тому інтерфейс віджету залишається узгодженим з тим, що сервер фактично виконує.
Карта функцій та плагінів
Інтерфейс продукту використовує термін «плагін» як широку мітку функції, проте реєстрація на сервері відрізняється:
| Функція | Як увімкнено | Можливість | Вносить |
|---|---|---|---|
| Анотація | Вбудовано в переглядач; включає ресурси анотації | Annotation | Авторинг у браузері, збереження сеансів та експорт з вбудованою анотацією |
| Пошук | Вбудовано в переглядачі форматів з підтримкою пошуку; включає ресурси пошуку та дозволяє вилучення за потреби | Search | Рідний текстовий індекс, підсвічування та навігація результатами |
| Конвертер | Встановіть Doconut.NETStandard.Converter та зареєструйте ConverterPlugin | Converter | Сервіс конвертації C# та необов'язковий веб‑віджет |
| DICOM | Встановіть Doconut.NETStandard.Dicom та зареєструйте DicomPlugin | Dicom | Перегляд медичних зображень для .dcm та .ima |
Анотація та звичайний Пошук не використовують AddPlugin<TPlugin>(); їхні пакети генеруються лише коли ліцензія надає відповідну можливість. Конвертер та DICOM — це випущені реалізації IDoconutPlugin за вибором для цього набору документації.
Схвалені артефакти .NET Standard містять Doconut.NETStandard.Converter та Doconut.NETStandard.Dicom тієї ж версії, що й основний пакет.
Випущені пакети плагінів
| Плагін | Пакет | Можливість | Вносить |
|---|---|---|---|
| Конвертер | Doconut.NETStandard.Converter | Converter | Можливість конвертації документів |
| DICOM | Doconut.NETStandard.Dicom | Dicom | Перегляд медичних зображень (.dcm — формат лише для плагіна) |
Кожен має окрему сторінку у розділі Plugins з його налаштуваннями та використанням.
Кастомні переглядачі — ваш власний обробник форматів
Ви можете підключити переглядач до конвеєра без створення пакету плагіна, безпосередньо з Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // реалізує IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // необов’язкова стандартна конфігурація
});Кастомні переглядачі мають пріоритет над усім — як над вбудованими, так і над плагінами — і не підлягають обмеженню ліцензією (це ваш код). Фабрика повертається до ImageConfig, якщо ви не надаєте конфігурацію за замовчуванням.
Висновки
- Плагіни реєструються явно, і їх
LicenseCapabilityперевіряється під часAddDoconut()— відсутність або недостатність прав, не тимчасових, призводить до швидкої помилки. - Плагіни типу Override працюють плавно; формати лише для плагіна завершуються помилкою
LicenseException. - Активна тимчасова ліцензія розблоковує все; у продакшн‑режимі розблоковується те, що ви придбали. Перевірте за допомогою
IDoconutLicenseServiceперед випуском.
Чи була ця сторінка корисною?