DoconutExtensions
Registrazione di servizi e middleware
DoconutExtensions (namespace Doconut.Middleware) è la classe statica con le tre chiamate che ogni host Doconut esegue: una registrazione di servizio e due registrazioni di middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Costruisce le DoconutOptions, le valida in modo fail-fast (vedi DoconutOptions → Validazione all'avvio) e registra l'intero grafo dei servizi:
| Servizio | Durata | Ruolo |
|---|---|---|
DoconutOptions | Singleton | L'oggetto di configurazione |
IViewerFactory | Singleton | Mappa le estensioni ai visualizzatori di formato |
IDocumentSessionManager | Singleton | Token → cache della sessione (IMemoryCache è registrato anche) |
IDoconutLicenseService | Singleton | Licenza caricata una sola volta all'avvio (precedenza: LicenseStream → LicenseContent → LicensePath → ricerca automatica) |
PageImageService | Singleton | Pipeline di immagini di pagina (filigrana/rotazione/scalatura/annotazioni) |
| Document security (access store) | Singleton | Concessioni per il binding token‑sessione |
Viewer | Transient | La facciata pubblica di apertura/chiusura |
DocumentConverter | Transient | Facciata di conversione — richiede il plugin Converter |
Health check "doconut" | — | Riporta lo stato di licenza/scadenza tramite i controlli di integrità di ASP.NET |
Due comportamenti da conoscere:
- Il Converter richiede il suo plugin. Risolvere
DocumentConvertersenzaoptions.AddPlugin<ConverterPlugin>()genera:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- L'entitlement del plugin è validato all'avvio. Una licenza mancante, un file legacy
TRIALo una licenza a pagamento senza la capacità di un plugin registrato falliscono al momento diAddDoconut(). Le registrazioni temporanee/demo sopravvivono alla data di scadenza, mentre i controlli a runtime revocano le capacità scadute.
Il controllo di integrità si integra con il meccanismo standard di ASP.NET Core — mappalo se vuoi lo stato della licenza sul tuo endpoint di salute:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Aggiunge il middleware di immagini di pagina Doconut. Risponde a ogni richiesta che contiene il parametro di query ?token= — pagine, miniature, ricerca, annotazioni, azioni di pagina (la tabella completa delle richieste è in Core Concepts → How the Viewer Works). Quando UnsafeMode è false, lo strato di sicurezza del documento viene collegato automaticamente prima di esso.
Il campione di riferimento instrada le richieste del widget attraverso un ramo di percorso:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Serve i file JS, CSS, immagini e font incorporati in DoconutOptions.ResourcesPath (predefinito /doconut-res). Questi sono i file per i quali Viewer.ReferenceCss() / ReferenceScripts() emettono i tag.
Chiama sempre questo metodo prima di UseDoconut(). Se l'area del visualizzatore rimane vuota e la console del browser mostra 404 per /doconut-res/..., questa chiamata è mancante o posizionata in modo errato.
Ordering recap
app.UseRouting();
app.UseSession(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1° chiamata Doconut
app.UseDoconut(); // 2° chiamata Doconut (o tramite un ramo MapWhen)Questa pagina è stata utile?