DoconutOptions

Configure los servicios Doconut

DoconutOptions (namespace Doconut) es el único objeto de configuración para todo el SDK. Lo configuras una vez, dentro de AddDoconut(), y se registra como un singleton.

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

Propiedades

TipoPropiedadPredeterminadoDescripción
boolShowDoconutInfofalseCuando true, una solicitud de middleware sin token devuelve un banner de versión (Doconut <version> is running on <host>) en lugar de 404. Útil como una verificación rápida; deja false en producción.
boolUnsafeModefalseCuando true, omite la verificación de seguridad de la sesión ASP.NET en las solicitudes de página. Deja false en producción (ver Conceptos básicos → Sesiones y seguridad).
stringMiddlewarePath"/doconut"Valor de coordinación para el endpoint page-image. Se valida, pero no monta una rama del pipeline; mantenlo alineado con el mapeo real de UseDoconut() y el cliente BasePath.
stringResourcesPath"/doconut-res"Prefijo de ruta URL para los recursos incrustados JS/CSS/imagen/fuente.
stringLicensePath""Ruta al archivo de licencia. Vacío → siguiente fuente de licencia, luego autodescubrimiento; si no se encuentra nada → estado de evaluación con marca de agua sin capacidades.
stringLicenseContent""Contenido XML bruto de la licencia (base de datos, variable de entorno, gestor de secretos). Tiene precedencia sobre LicensePath.
Stream?LicenseStreamnullLicencia como flujo, leída una vez al iniciar. Tiene precedencia sobre ambas fuentes restantes.
boolResetLicensefalseBandera de compatibilidad reservada. La implementación actual de .NET 6 no la consume; reinicia la aplicación después de reemplazar una licencia.
DoconutPluginRegistryPluginRegistry—Registro de solo lectura que recopila contribuciones de plugins; consumido por la fábrica de visores. Poblado mediante AddPlugin<T>().

Precedencia de licencias (aplicada al registrar el servicio): LicenseStream → LicenseContent → LicensePath → descubrimiento automático (ver Introducción → Configuración de licencia).

Métodos

AddPlugin<TPlugin>()

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

Utiliza este método para los paquetes Converter y DICOM opt-in publicados. La anotación y la búsqueda normal son funciones con licencia integradas y no usan AddPlugin<TPlugin>().

Registra un plugin de primera parte (Converter, DICOM). Fluent — devuelve la instancia de opciones. AddDoconut() lanza InvalidOperationException por una licencia faltante, archivo heredado TRIAL, o licencia paga que no otorga la capacidad del plugin. Los registros temporales/Demo se conservan después de la expiración y quedan sujetos a la puerta de tiempo de ejecución (ver Conceptos básicos → Sistema de plugins).

El widget Converter opt-in se habilita con AddConverterWidget() y se expone a través de la propiedad de solo lectura ConverterWidget; sus opciones están documentadas en la página del Plugin Converter (Plugins → Plugin Converter).

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — punto inicial opcional
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

Registra un visor personalizado para una extensión de archivo. Los visores personalizados tienen precedencia sobre los visores integrados y de plugins y no están sujetos a licencias. Cuando defaultConfig se omite y un documento se abre sin una configuración explícita, se usa un ImageConfig.

Lanza ArgumentException (Extension must be a non-empty file extension.) por una extensión vacía y ArgumentNullException por una fábrica nula.

Validación de inicio

AddDoconut() valida las opciones fail-fast, de modo que una mala configuración se manifieste como una excepción clara al iniciar en lugar de 404 confusos en tiempo de solicitud:

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.

Configuraciones comunes

csharp
// Producción: licencia explícita, todo bloqueado (todos los valores predeterminados de seguridad)
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});

// Rutas personalizadas (p. ej. para evitar un conflicto de ruta)
builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});

Cuando cambies ResourcesPath, mantén el ResPath del widget cliente sincronizado (ver ViewerConfig).

MiddlewarePath no es un mapeador automático de rutas ASP.NET Core. Si Doconut debe responder solo bajo un prefijo personalizado, monta UseDoconut() en esa rama (por ejemplo con app.Map("/docs-engine", branch => branch.UseDoconut())) y establece el cliente BasePath a la misma URL.

¿Fue útil esta página?