Система Плагінів
Розширте переглядач за допомогою плагінів
Ядро 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; } // наприклад "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.NET6.Converter та зареєструйте ConverterPlugin | Converter | Служба конвертації C# та необов’язковий веб-виджет |
| DICOM | Встановіть Doconut.NET6.Dicom та зареєструйте DicomPlugin | Dicom | Перегляд медичних зображень для .dcm та .ima |
Анотація та звичайний Пошук не використовують AddPlugin<TPlugin>(); їхні пакети генеруються лише коли ліцензія надає відповідну можливість. Конвертер і DICOM — це випущені реалізації IDoconutPlugin за вибором для цього набору документації.
Схвалені артефакти .NET 6 містять Doconut.NET6.Converter та Doconut.NET6.Dicom тієї ж версії, що й основний пакет.
Випущені пакети плагінів
| Плагін | Пакет | Можливість | Вносить |
|---|---|---|---|
| Конвертер | Doconut.NET6.Converter | Converter | Можливість конвертації документів |
| DICOM | Doconut.NET6.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перед випуском.
Чи була ця сторінка корисною?