Система Плагінів
Розширте переглядач за допомогою плагінів
Ядро Doconut залишається легким; додаткова функціональність постачається у вигляді plugins — окремих пакетів 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(".dcm", () => new DicomViewer())— переглядач для розширення файлу,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 — це випущені реалізації opt‑in 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перед випуском.
Чи була ця сторінка корисною?