DoconutExtensions
Service and middleware registration
DoconutExtensions (namespace Doconut.Middleware) è la classe statica con le tre chiamate che ogni host Doconut effettua: una registrazione di servizio e due registrazioni di middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // PRIMA UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Costruisce il DoconutOptions, li valida in modo fail-fast (vedi DoconutOptions → convalida all'avvio), e registra l'intero grafo dei servizi:
| Servizio | Durata | Ruolo |
|---|---|---|
DoconutOptions | Singleton | L'oggetto di configurazione |
| Servizio di cache della sessione | Singleton | Token → cache della sessione (IMemoryCache è registrato anche) |
IDoconutLicenseService | Singleton | Licenza caricata una volta all'avvio (precedenza: LicenseStream → LicenseContent → LicensePath → ricerca automatica) |
| Pipeline di immagini di pagina | Singleton | Esegue l'elaborazione delle immagini per le pagine (filigrana, rotazione, scala, annotazioni) |
| Sicurezza del documento (archivio di accesso) | Singleton | Concessioni per il collegamento token-sessione |
Viewer | Transient | La facciata pubblica di apertura/chiusura |
DocumentConverter | Transient | Facciata di conversione — richiede il plugin Converter |
DistributedDocumentPublisher | — | Pubblica gli artefatti di un documento nello storage condiviso |
Health check "doconut" | — | Riporta lo stato di licenza/scadenza tramite i controlli di salute di ASP.NET |
Non esiste una chiamata equivalente nella precedente libreria .NET Standard. Costruiva new Viewer(cache, accessor) per richiesta e passava le opzioni al middleware; entrambi sono sostituiti da questa singola registrazione.
Due comportamenti da conoscere:
- Converter richiede il suo plugin. Risolvere
DocumentConvertersenzaoptions.AddPlugin<ConverterPlugin>()genera un'eccezione:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- L'entitlement del plugin è convalidato all'avvio. Una licenza mancante, un file legacy
TRIAL, o una licenza a pagamento senza la capacità di un plugin registrato fallisce al momentoAddDoconut(). Le registrazioni temporanee/Demo sopravvivono alla loro data di scadenza, mentre i gate di runtime revocano le capacità scadute.
Il controllo di salute si integra con il meccanismo standard di ASP.NET Core — mappalo se desideri 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 un parametro di query ?token= — pagine, miniature, ricerca, annotazioni, azioni di pagina (la tabella completa delle richieste è in Concetti di Base → Come Funziona il Viewer). Quando UnsafeMode è false, lo strato di sicurezza del documento viene collegato automaticamente prima di esso.
Non richiede argomenti. Passare un'istanza DoconutOptions qui era la forma della libreria precedente e non compila più.
L'esempio di riferimento instrada le richieste del widget attraverso un ramo di percorso, mantenendo la forma storica della richiesta:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Fornisce i JS, CSS, immagini e font incorporati a DoconutOptions.ResourcesPath (predefinito /doconut-res). Questi sono i file per i quali Viewer.ReferenceCss() / ReferenceScripts() emettono i tag.
Chiamalo sempre prima di UseDoconut(). Se l'area del viewer rimane vuota e la console del browser mostra 404 per /doconut-res/..., questa chiamata è mancante o posizionata in modo errato.
Questa è la sostituzione supportata per collegare manualmente il middleware di gestione delle risorse incorporate.
Servire dallo storage condiviso
Altre due registrazioni esistono per le distribuzioni in cui il nodo che rende un documento non è necessariamente il nodo che serve le sue pagine. Entrambe sono coperte end-to-end in Distribuzioni Distribuite; le firme sono:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // coda di pubblicazione in background opt-in
IServiceCollection AddDoconutDistributedWidgets(...) // archivio di supporto condiviso per i caricamenti dei widgetIl lato di lettura è un middleware separato dal pacchetto Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) e WebFarmOptions non esistono in questa versione. Vedi la guida di migrazione per la mappatura impostazione per impostazione.
Riepilogo dell'ordinamento
app.UseRouting();
app.UseSession(); // necessario quando UnsafeMode = false
app.UseDoconutResources(); // prima chiamata Doconut
app.UseDoconut(); // seconda chiamata Doconut (o tramite un ramo MapWhen)Questa pagina è stata utile?