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.

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

AddDoconut

text
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:

ServizioDurataRuolo
DoconutOptionsSingletonL'oggetto di configurazione
Servizio di cache della sessioneSingletonToken → cache della sessione (IMemoryCache è registrato anche)
IDoconutLicenseServiceSingletonLicenza caricata una volta all'avvio (precedenza: LicenseStream → LicenseContent → LicensePath → ricerca automatica)
Pipeline di immagini di paginaSingletonEsegue l'elaborazione delle immagini per le pagine (filigrana, rotazione, scala, annotazioni)
Sicurezza del documento (archivio di accesso)SingletonConcessioni per il collegamento token-sessione
ViewerTransientLa facciata pubblica di apertura/chiusura
DocumentConverterTransientFacciata 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 DocumentConverter senza options.AddPlugin<ConverterPlugin>() genera un'eccezione:
text
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 momento AddDoconut(). 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:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
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:

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

UseDoconutResources

text
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:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // coda di pubblicazione in background opt-in
IServiceCollection AddDoconutDistributedWidgets(...)        // archivio di supporto condiviso per i caricamenti dei widget

Il lato di lettura è un middleware separato dal pacchetto Doconut.Clouds:

text
IApplicationBuilder UseDoconutCloud<THandler>(
    this IApplicationBuilder app,
    Action<CloudOptions>? configure = null,
    string pathPrefix = "/doconut-cloud")
    where THandler : BaseCloudHandler

UseDoconutWebFarm(...) e WebFarmOptions non esistono in questa versione. Vedi la guida di migrazione per la mappatura impostazione per impostazione.

Riepilogo dell'ordinamento

csharp
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?