Система Плагінів
Розширте переглядач за допомогою плагінів
Ядро Doconut залишається легким; додаткова функціональність постачається у вигляді плагінів — окремих пакетів NuGet, які додають переглядачі або сервіси і активуються вашою ліцензією. На цій сторінці пояснюється модель реєстрації, що відбувається під час запуску, коли ліцензія не охоплює плагін, і як підключити власний переглядач.
Реєстрація плагіна
Кожен пакет плагіна надає один клас плагіна. Зареєструйте його один раз у Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// Зареєстрований плагін, у якого відсутня ліцензія, викидає виключення тут, у Application_Start, і
// сайт потім відповідає на кожен запит порожнім 500. Причина знаходиться у журналі подій Windows.AddPlugin<TPlugin>() створює плагін і дозволяє йому зареєструвати свої внески за допомогою DoconutOptions. Усе, що додає плагін, позначається необхідною можливістю плагіна, і DoconutHost.Initialize перевіряє кожен зареєстрований плагін щодо ліцензії перед тим, як сайт обробить свій перший запит.
Відсутня ліцензія на плагін зупиняє сайт
Коли жодна активна ліцензія не надає можливості зареєстрованого плагіна — жодної ліцензії, застарений файл TRIAL або платна ліцензія без цієї можливості — DoconutHost.Initialize генерує InvalidOperationException з Application_Start:
The Converter plugin is registered via AddPlugin but no active license grants Converter.
Remove the AddPlugin<...>() call or install a license (or trial/demo) that includes Converter.У System.Web виключення у Application_Start не створює сторінку помилки. Кожен запит відповідає порожнім 500, журнал IIS не містить корисної інформації, а повідомлення з’являється лише у журналі подій Windows (журнал застосунків, джерело ASP.NET). Коли сайт перестає відповідати одразу після додавання рядка AddPlugin, спочатку перевірте файли ліцензії у wwwroot — див. Налаштування ліцензії.
Контракт
Плагін реалізує навмисно малий інтерфейс:
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і.ima— DICOM не має вбудованого переглядача): без можливості відкриття не вдається:
LicenseException: This document type requires the 'Dicom' plugin license.Активна тимчасова ліцензія надає всі можливості. Це класичний сюрприз під час запуску: ті ж рядки AddPlugin, які працювали під час оцінки, зупиняють сайт, коли придбана ліцензія пропускає одну з цих можливостей. Порівняйте IsCapabilityGranted(...) з тим, що ви придбали перед розгортанням. При повній відсутності ліцензії нічого не надається — відсутня ліцензія не є тимчасовою.
Те саме обмеження діє і в браузері: Viewer.ReferenceScripts() і ReferenceCss() передають файли для функцій, обмежених ліцензією (Пошук, Анотація) лише коли ліцензія їх надає, тому сторінка ніколи не пропонує функцію, яку сервер відхилить.
Карта функцій та плагінів
| Функція | Як увімкнено | Можливість | Вносить |
|---|---|---|---|
| Анотація | Вбудовано в переглядач; включити ресурси анотації | Annotation | Авторинг у браузері, збереження сесії, вбудовані експорти |
| Пошук | Вбудовано в переглядачі форматів з підтримкою пошуку; включити ресурси пошуку | Search | Рідний текстовий індекс, підсвічування, навігація результатами |
| Конвертер | Встановіть Doconut.NETFramework.Converter і зареєструйте ConverterPlugin | Converter | Сервіс конвертації C# та необов’язковий веб‑віджет |
| DICOM | Встановіть Doconut.NETFramework.Dicom і зареєструйте DicomPlugin | Dicom | Перегляд медичних зображень для .dcm і .ima |
Анотація та Пошук не використовують AddPlugin<TPlugin>(). Конвертер і DICOM мають окрему сторінку у розділі Plugins з їхньою конфігурацією та використанням. У цьому пакеті DICOM відтворює сторінки, кадри та анімації, але не читає технічні метадані — дивіться Плагін DICOM.
Користувацькі переглядачі — ваш власний обробник форматів
Ви можете підключити переглядач до конвеєра без створення пакету плагіна, безпосередньо у Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // реалізує IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // необов’язкова типова конфігурація
});Користувацькі переглядачі мають пріоритет над усім — як над вбудованими, так і над плагінами — і не підлягають обмеженню ліцензією: це ваш код. Якщо ви не надаєте конфігурацію за замовчуванням, фабрика використовує ImageConfig.
Висновки
- Плагіни реєструються явно у
DoconutHost.Initialize, і їхні можливості перевіряються там; відсутність прав зупиняє сайт з порожнім500, причина якого записана у журналі подій Windows. - Плагіни типу override працюють коректно при відсутності можливості; формати, підтримувані лише плагінами, завершуються помилкою
LicenseException. - Активна тимчасова ліцензія розблоковує все; у продакшн‑режимі розблоковується те, що ви придбали. Перевірте за допомогою
IDoconutLicenseServiceперед випуском.
Чи була ця сторінка корисною?