DoconutExtensions

Регистрация сервисов и middleware

DoconutExtensions (namespace Doconut.Middleware) — это статический класс с тремя вызовами, которые делает каждый хост Doconut: одна регистрация сервиса и две регистрации middleware.

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

Создаёт DoconutOptions, быстро проверяет их корректность (см. DoconutOptions → Проверка при запуске) и регистрирует полный граф сервисов:

СервисВремя жизниРоль
DoconutOptionsSingletonОбъект конфигурации
IViewerFactorySingletonОтображает расширения к просмотрам форматов
IDocumentSessionManagerSingletonТокен → кэш сессий (IMemoryCache также зарегистрирован)
IDoconutLicenseServiceSingletonЛицензия загружается один раз при старте (приоритет: LicenseStreamLicenseContentLicensePath → авто‑поиск)
PageImageServiceSingletonКонвейер обработки изображений страниц (водяной знак/поворот/масштаб/аннотации)
Document security (access store)SingletonПредоставляет права для привязки токена к сессии
ViewerTransientПубличный фасад открытие/закрытие
DocumentConverterTransientФасад конвертации — требует плагин Converter
Health check "doconut"Отчёт о состоянии лицензии/срока через проверки здоровья ASP.NET

Два поведения, которые стоит знать:

  • Converter требует своего плагина. Разрешение DocumentConverter без options.AddPlugin<ConverterPlugin>() вызывает исключение:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • Права плагина проверяются при запуске. Отсутствующая лицензия, устаревший файл TRIAL или платная лицензия без зарегистрированного плагина приводят к ошибке во время вызова AddDoconut(). Временные/демо‑регистрации продолжают работать после истечения срока, тогда как ограничения времени выполнения блокируют просроченные возможности.

Проверка здоровья интегрируется со стандартным механизмом ASP.NET Core — добавьте её, если хотите видеть состояние лицензии на конечной точке здоровья:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Добавляет middleware обработки изображений страниц Doconut. Он отвечает на каждый запрос, содержащий параметр ?token= — страницы, миниатюры, поиск, аннотации, действия со страницами (полная таблица запросов находится в Core Concepts → How the Viewer Works). Когда UnsafeMode равно false, слой безопасности документов автоматически подключается перед ним.

Ссылка‑пример маршрутизирует запросы виджета через ветвление пути:

csharp
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

Обслуживает встроенные JS, CSS, изображения и шрифты по пути DoconutOptions.ResourcesPath (по умолчанию /doconut-res). Это файлы, для которых Viewer.ReferenceCss() / ReferenceScripts() генерируют теги.

Всегда вызывайте его перед UseDoconut(). Если область просмотра остаётся пустой, а консоль браузера показывает 404‑ошибки для /doconut-res/..., значит этот вызов отсутствует или расположен неверно.

Ordering recap

csharp
app.UseRouting();
app.UseSession();          // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut();          // 2nd Doconut call (or via a MapWhen branch)

Была ли эта страница полезной?