DoconutOptions
Configura 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.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.UnsafeMode = false;
options.ShowDoconutInfo = false;
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});Propiedades
| Tipo | Propiedad | Valor predeterminado | Descripción |
|---|---|---|---|
bool | ShowDoconutInfo | false | Cuando true, una solicitud de middleware sin token devuelve una pancarta 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. |
bool | UnsafeMode | false | Cuando true, omite la comprobació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). |
string | MiddlewarePath | "/doconut" | Valor de coordinación para el endpoint de página-imagen. Se valida, pero no monta una rama del pipeline; mantenlo alineado con el mapeo real de UseDoconut() y el BasePath del cliente. |
string | ResourcesPath | "/doconut-res" | Prefijo de ruta URL para los recursos incrustados JS/CSS/imagen/fuente. |
string | LicensePath | "" | 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 y sin capacidades. |
string | LicenseContent | "" | Contenido XML de licencia sin procesar (base de datos, variable de entorno, gestor de secretos). Tiene precedencia sobre LicensePath. |
Stream? | LicenseStream | null | Licencia como flujo, leída una vez al iniciar. Tiene precedencia sobre ambas fuentes restantes. |
bool | ResetLicense | false | Bandera de compatibilidad reservada. La implementación actual de .NET 6 no la utiliza; reinicia la aplicación después de reemplazar una licencia. |
DoconutPluginRegistry | PluginRegistry | — | Registro de solo lectura que recopila contribuciones de plugins; consumido por la fábrica de visores. Poblado mediante AddPlugin<T>(). |
Precedencia de licencia (aplicada al registrar el servicio): LicenseStream → LicenseContent → LicensePath → descubrimiento automático (ver Introducción → Configuración de licencia).
Métodos
AddPlugin()
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()Utiliza este método para los paquetes Converter y DICOM de opción opt‑in publicados. La anotación y la búsqueda normal son funciones con licencia incorporadas y no usan AddPlugin<TPlugin>().
Registra un plugin de primera parte (Converter, DICOM). Fluent — devuelve la instancia de opciones. AddDoconut() lanza InvalidOperationException si falta una licencia, el archivo heredado TRIAL, o una 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?)
DoconutOptions RegisterViewer(
string extension, // ".myext" — leading dot optional
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 incorporados y de plugins y no están sujetos a licencia. Cuando se omite defaultConfig 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.) para una extensión vacía y ArgumentNullException para una fábrica nula.
Validación de inicio
AddDoconut() valida las opciones fail-fast, de modo que una mala configuración se muestra como una excepción clara al iniciar en lugar de 404 confusos en tiempo de solicitud:
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
// Production: explicit license, everything locked down (all security defaults)
builder.Services.AddDoconut(options =>
{
options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});
// Custom paths (e.g. to avoid a route conflict)
builder.Services.AddDoconut(options =>
{
options.MiddlewarePath = "/docs-engine";
options.ResourcesPath = "/docs-assets";
});Cuando cambies ResourcesPath, mantén sincronizado el ResPath del widget cliente (ver ViewerConfig).
MiddlewarePath no es un mapeador de rutas automático de 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 BasePath del cliente a la misma URL.
¿Fue útil esta página?