Система Плагінів
Розширте переглядач за допомогою плагінів
Ядро 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. Реєстрація Тимчасова/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>(() => …)— типізований сервіс, який інші частини конвеєра можуть знайти.
Можливості та обмеження
Можливості (capabilities) — це одиниці ліцензії. Converter і Dicom постачаються як плагіни за вибором; Search і Annotation — вбудовані функції, які обмежуються так само. Базовий переглядач не є можливістю — це передумова, представлена як IsViewerLicensed у сервісі ліцензій.
Зазвичай перевірка під час запуску запобігає потраплянню непідкритого плагіна у конвеєр запитів. Фабрика переглядачів також застосовує два захисних правила під час виконання, які важливі, якщо права змінюються після запуску:
- Плагін замінює вбудований переглядач (плагін заявляє розширення, яке також обробляє вбудований реєстр): при наявності ліцензованої можливості переглядач плагіна переважає; без неї Doconut тихо повертається до вбудованого переглядача. Користувачі все ще бачать документ — просто не отримують функціональність плагіна.
- Формат лише для плагіна (наприклад
.dcm— DICOM не має вбудованого переглядача): без необхідної можливості виклик відкриття завершується з помилкою:
LicenseException: This document type requires the 'Dicom' plugin license.Активна Тимчасова ліцензія надає всі можливості (з чистим, без водяних знаків базовим переглядом). Це класичне джерело несподіванок під час запуску: реєстрація тих самих плагінів з купленою ліцензією, яка не включає одну з їх можливостей, призводить до помилки AddDoconut() під час запуску. Порівняйте IsCapabilityGranted(...) зі своїм планом перед розгортанням. З іншого боку: при відсутності будь‑якої ліцензії нічого не надається — відсутня ліцензія не є Тимчасовою ліцензією.
Те ж саме обмеження проявляється на клієнті: Viewer.ReferenceScripts() і ReferenceCss() генерують пакети скриптів/стилів для функцій, обмежених ліцензією (search, annotation, …) лише коли ліцензія їх дозволяє, тому інтерфейс віджету залишається узгодженим з тим, що реально виконує сервер.
Карта функцій та плагінів
У інтерфейсі продукту термін «плагін» використовується як широка мітка функції, але реєстрація на сервері відрізняється:
| Функція | Як увімкнено | Capability | Вносить |
|---|---|---|---|
| Annotation | Вбудовано в переглядач; включає ресурси анотацій | Annotation | Авторинг у браузері, збереження сеансу та експорт з вбудованими анотаціями |
| Search | Вбудовано в переглядачі форматів з пошуком; включає ресурси пошуку та дозволяє витяг, коли це потрібно | Search | Рідний текстовий індекс, підсвічування та навігація результатами |
| Converter | Встановити Doconut.NET6.Converter і зареєструвати ConverterPlugin | Converter | Служба конвертації C# та додатковий веб‑віджет |
| DICOM | Встановити Doconut.NET6.Dicom і зареєструвати DicomPlugin | Dicom | Перегляд медичних зображень для .dcm та .ima |
Annotation та звичайний Search не використовують AddPlugin<TPlugin>(); їхні пакети генеруються лише коли ліцензія надає відповідну можливість. Converter і DICOM — це випущені плагіни‑реалізації IDoconutPlugin за вибором для цього набору документації.
У затверджених артефактах .NET 6 містяться Doconut.NET6.Converter і Doconut.NET6.Dicom тієї ж версії, що й основний пакет.
Випущені пакети плагінів
| Плагін | Пакет | Capability | Вносить |
|---|---|---|---|
| Converter | Doconut.NET6.Converter | Converter | Можливість конвертації документів |
| DICOM | Doconut.NET6.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перед випуском.
Чи була ця сторінка корисною?