DoconutExtensions
Регистрация сервисов и middleware
DoconutExtensions (namespace Doconut.Middleware) — это статический класс с тремя вызовами, которые делает каждый хост Doconut: одна регистрация сервиса и две регистрации middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Создаёт DoconutOptions, проверяет их сразу при ошибке (см. DoconutOptions → проверка при запуске) и регистрирует полный граф сервисов:
| Сервис | Время жизни | Роль |
|---|---|---|
DoconutOptions | Одиночный | Объект конфигурации |
IViewerFactory | Одиночный | Отображает расширения к просмотрам форматов |
IDocumentSessionManager | Одиночный | Токен → кэш сессий (IMemoryCache также зарегистрирован) |
IDoconutLicenseService | Одиночный | Лицензия загружается один раз при запуске (приоритет: LicenseStream → LicenseContent → LicensePath → автоматический поиск) |
PageImageService | Одиночный | Конвейер обработки изображений страниц (водяной знак/поворот/масштаб/аннотации) |
| Безопасность документа (хранилище доступа) | Одиночный | Предоставляет права для привязки токена к сессии |
Viewer | Временный | Публичный фасад открытие/закрытие |
DocumentConverter | Временный | Фасад конвертации — требует плагин Converter |
Проверка состояния "doconut" | — | Отчёт о состоянии лицензии/срока действия через проверки состояния ASP.NET |
Два поведения, которые стоит знать:
- Converter требует свой плагин. Попытка получить
DocumentConverterбез вызоваoptions.AddPlugin<ConverterPlugin>()приводит к исключению:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Права плагина проверяются при запуске. Отсутствующая лицензия, устаревший файл
TRIALили платная лицензия без зарегистрированных возможностей плагина вызывают ошибку во время вызоваAddDoconut(). Временные/демо‑регистрации сохраняются после даты истечения, тогда как ограничения во время выполнения отзывают просроченные возможности.
Проверка состояния интегрируется со стандартным механизмом ASP.NET Core — добавьте её, если хотите видеть состояние лицензии на конечной точке health:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Добавляет middleware Doconut для обработки изображений страниц. Он отвечает на каждый запрос, содержащий параметр ?token= — страницы, миниатюры, поиск, аннотации, действия со страницами (полная таблица запросов находится в Основные концепции → Как работает Viewer). Когда UnsafeMode установлен в false, слой безопасности документа автоматически подключается перед этим middleware.
В примере запросы виджета направляются через ветвление пути:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Обслуживает встроенные JS, CSS, изображения и шрифты по пути DoconutOptions.ResourcesPath (по умолчанию /doconut-res). Это файлы, для которых Viewer.ReferenceCss() / ReferenceScripts() генерируют теги.
Всегда вызывайте его до UseDoconut(). Если область просмотра остаётся пустой и консоль браузера показывает 404 для /doconut-res/..., этот вызов отсутствует или расположен неправильно.
Итоги порядка вызовов
app.UseRouting();
app.UseSession(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1‑й вызов Doconut
app.UseDoconut(); // 2‑й вызов Doconut (или через ветвление MapWhen)Была ли эта страница полезной?