DoconutExtensions

Registro de servicios y middleware

DoconutExtensions (namespace Doconut.Middleware) es la clase estática con las tres llamadas que cada host Doconut realiza: un registro de servicio y dos registros de middleware.

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

AddDoconut

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

Construye el DoconutOptions, lo valida de forma inmediata (ver DoconutOptions → Validación de inicio), y registra el grafo completo de servicios:

ServicioTiempo de vidaRol
DoconutOptionsSingletonEl objeto de configuración
IViewerFactorySingletonAsocia extensiones a visores de formato
IDocumentSessionManagerSingletonToken → caché de sesión (IMemoryCache también está registrado)
IDoconutLicenseServiceSingletonLicencia cargada una vez al iniciar (precedencia: LicenseStreamLicenseContentLicensePath → búsqueda automática)
PageImageServiceSingletonCanal de imágenes de página (marca de agua/rotación/escala/anotaciones)
Document security (access store)SingletonConcesiones para la vinculación token‑sesión
ViewerTransientLa fachada pública de apertura/cierre
DocumentConverterTransientFachada de conversión — requiere el plugin Converter
Health check "doconut"Informa el estado de licencia/vencimiento mediante los health checks de ASP.NET

Dos comportamientos que vale la pena conocer:

  • El convertidor requiere su plugin. Resolver DocumentConverter sin options.AddPlugin<ConverterPlugin>() lanza:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • La autorización del plugin se valida al iniciar. Una licencia faltante, un archivo TRIAL heredado, o una licencia paga sin la capacidad de un plugin registrado falla en el momento de AddDoconut(). Los registros temporales/Demo sobreviven a su fecha de expiración, mientras que las puertas en tiempo de ejecución revocan las capacidades expiradas.

El health check se integra con el mecanismo estándar de ASP.NET Core — mapealo si deseas el estado de la licencia en tu endpoint de salud:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Agrega el middleware de imágenes de página de Doconut. Responde a cada solicitud que lleva un parámetro de consulta ?token= — páginas, miniaturas, búsquedas, anotaciones, acciones de página (la tabla completa de solicitudes está en Conceptos básicos → Cómo funciona el visor). Cuando UnsafeMode es false, la capa de seguridad del documento se conecta automáticamente antes de él.

El ejemplo de referencia dirige las solicitudes del widget a través de una rama de ruta:

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

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

Sirve los JS, CSS, imágenes y fuentes incrustados en DoconutOptions.ResourcesPath (por defecto /doconut-res). Estos son los archivos para los que Viewer.ReferenceCss() / ReferenceScripts() generan etiquetas.

Siempre llámalo antes de UseDoconut(). Si el área del visor permanece vacía y la consola del navegador muestra 404 para /doconut-res/..., esta llamada falta o está mal ubicada.

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)

¿Fue útil esta página?