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.
Esto es un cambio de ubicación tanto como de forma. En la biblioteca .NET Standard anterior una
DoconutOptions instancia se construía en tiempo de canalización y se entregaba a
UseDoconut(new DoconutOptions { … }). Aquí el middleware no recibe opciones en absoluto —
todo se establece durante el registro del servicio.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.UnsafeMode = false;
options.ShowDoconutInfo = false;
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});Propiedades
| Tipo | Propiedad | Predeterminado | Descripción |
|---|---|---|---|
bool | ShowDoconutInfo | false | Cuando true, una solicitud de middleware sin token devuelve un banner de versión en lugar de 404. Útil como una verificación rápida; deja false en producción. |
bool | UnsafeMode | false | Cuando true, omite la verificación de seguridad de la sesión ASP.NET en las solicitudes de página. Deja false en producción en un solo nodo (ver Conceptos clave → Sesiones y Seguridad). Anteriormente escrito UnSafeMode. |
string | MiddlewarePath | "/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. |
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 descubrimiento automático; si no se encuentra nada → estado de evaluación con marca de agua sin capacidades. |
string | LicenseContent | "" | Contenido XML crudo de la licencia (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 no la consume; 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 licencias (aplicada en el registro del servicio): LicenseStream → LicenseContent → LicensePath → descubrimiento automático (ver Introducción → Configuración de licencias).
Métodos
AddPlugin<TPlugin>()
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 incorporadas 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 legado 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 clave → 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" — 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 incorporados 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 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
// 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 sincronizado el ResPath del widget cliente (ver ViewerConfig). Esta es una de las dos configuraciones del lado del cliente que fallan sin mostrar un mensaje de error.
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 configura el cliente BasePath a la misma URL. La aplicación de referencia, en cambio, mantiene la forma histórica de solicitud DocImage.axd en una rama MapWhen con BasePath: '/'.
¿Fue útil esta página?