DoconutOptions

Настройка сервисов Doconut

DoconutOptions (namespace Doconut) является единственным объектом конфигурации для всего SDK. Вы настраиваете его один раз, внутри AddDoconut(), и он регистрируется как singleton.

Это изменение как места, так и формы. В предыдущей библиотеке .NET Standard экземпляр DoconutOptions создавался во время конвейера и передавался UseDoconut(new DoconutOptions { … }). Здесь middleware не принимает никаких параметров — всё задаётся во время регистрации сервисов.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath     = "Doconut.Viewer.lic";
    options.UnsafeMode      = false;
    options.ShowDoconutInfo = false;
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

Свойства

ТипСвойствоПо умолчаниюОписание
boolShowDoconutInfofalseКогда true, запрос middleware без токена возвращает баннер версии вместо 404. Полезно как проверка работоспособности; оставьте false в продакшене.
boolUnsafeModefalseКогда true, пропускает проверку безопасности ASP.NET‑session при запросах страниц. Оставьте false в продакшене на единственном узле (см. Основные концепции → Сессии и безопасность). Ранее писалось UnSafeMode.
stringMiddlewarePath"/doconut"Координационное значение для конечной точки page-image. Оно проверяется, но не монтирует ветку конвейера; держите его согласованным с реальным отображением UseDoconut() и клиентским BasePath.
stringResourcesPath"/doconut-res"Префикс URL‑пути для встроенных ресурсов JS/CSS/image/font.
stringLicensePath""Путь к файлу лицензии. Пусто → следующий источник лицензии, затем автообнаружение; если ничего не найдено → состояние оценки с водяным знаком без возможностей.
stringLicenseContent""Необработанное XML‑содержимое лицензии (база данных, переменная окружения, менеджер секретов). Имеет приоритет над LicensePath.
Stream?LicenseStreamnullЛицензия как поток, читается один раз при запуске. Имеет приоритет над обоими другими источниками.
boolResetLicensefalseЗарезервированный флаг совместимости. Текущая реализация его не использует; перезапустите приложение после замены лицензии.
DoconutPluginRegistryPluginRegistry—Регистр только для чтения, собирающий вклады плагинов; используется фабрикой просмотрщика. Заполняется через AddPlugin<T>().

Приоритет лицензий (применяется при регистрации сервисов): LicenseStream → LicenseContent → LicensePath → автоматическое обнаружение (см. Начало работы → Настройка лицензий).

Методы

AddPlugin<TPlugin>()

text
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()

Используйте этот метод для выпущенных опциональных пакетов Converter и DICOM. Аннотация и обычный Search являются встроенными лицензированными функциями и не используют AddPlugin<TPlugin>().

Регистрирует плагин первого уровня (Converter, DICOM). Fluent — возвращает экземпляр options. AddDoconut() бросает InvalidOperationException при отсутствии лицензии, устаревшем файле TRIAL или платной лицензии, не предоставляющей возможность плагина. Временные/демо‑регистрации сохраняются после истечения срока и подпадают под runtime‑gate (см. Основные концепции → Система плагинов).

Опциональный виджет Converter включается с помощью AddConverterWidget() и доступен через только‑для‑чтения свойство ConverterWidget; его параметры задокументированы на странице плагина Converter (Плагины → Плагин Converter).

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — начальная точка опциональна
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

Регистрирует пользовательский просмотрщик для расширения файла. Пользовательские просмотрщики имеют приоритет над встроенными и просмотрщиками плагинов и не зависят от лицензии. Когда defaultConfig опущен и документ открывается без явной конфигурации, используется ImageConfig.

Брасывает ArgumentException (Extension must be a non-empty file extension.) при пустом расширении и ArgumentNullException при null‑фабрике.

Проверка при запуске

AddDoconut() проверяет параметры fail-fast, поэтому ошибка конфигурации проявляется в виде явного исключения при запуске, а не в виде запутанных 404‑ов во время запроса:

text
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.

Общие конфигурации

csharp
// Продакшн: явная лицензия, всё заблокировано (все настройки безопасности по умолчанию)
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});

// Пользовательские пути (например, чтобы избежать конфликта маршрутов)
builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});

Когда вы меняете ResourcesPath, синхронно обновляйте ResPath клиентского виджета (см. ViewerConfig). Это одна из двух клиентских настроек, которые могут выйти из строя без сообщения об ошибке.

MiddlewarePath не является автоматическим маршрутизатором ASP.NET Core. Если Doconut должен отвечать только под пользовательским префиксом, смонтируйте UseDoconut() на этой ветке (например с помощью app.Map("/docs-engine", branch => branch.UseDoconut())) и задайте клиенту BasePath тот же URL. Справочное приложение вместо этого сохраняет историческую форму запроса DocImage.axd на ветке MapWhen с BasePath: '/'.

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