DoconutExtensions
Registrering av tjänster och middleware
DoconutExtensions (namespace Doconut.Middleware) är den statiska klassen med de tre anrop som varje Doconut‑värd gör: en tjänstregistrering och två middleware‑registreringar.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // FÖRE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Bygger DoconutOptions, validerar dem fail‑fast (se DoconutOptions → Startup validation), och registrerar hela tjänstgrafen:
| Tjänst | Livstid | Roll |
|---|---|---|
DoconutOptions | Singleton | Konfigurationsobjektet |
| Session cache-tjänst | Singleton | Token → sessionscache (IMemoryCache är också registrerad) |
IDoconutLicenseService | Singleton | Licens laddas en gång vid start (prioritet: LicenseStream → LicenseContent → LicensePath → autosökning) |
| Page-image pipeline | Singleton | Utför bildbehandling för sidor (vattenstämpel, rotera, skala, annotationer) |
| Dokumentssäkerhet (åtkomstlager) | Singleton | Beviljar bindning mellan token och session |
Viewer | Transient | Det offentliga öppna/stänga‑gränssnittet |
DocumentConverter | Transient | Konverteringsgränssnitt — kräver Converter‑pluginet |
DistributedDocumentPublisher | — | Publicerar ett dokuments artefakter till delat lagringsutrymme |
Health check "doconut" | — | Rapporterar licens-/utgångstillstånd via ASP.NET health checks |
Det finns inget motsvarande anrop i det tidigare .NET Standard‑biblioteket. Det konstruerade new Viewer(cache, accessor) per begäran och skickade alternativ till middleware; båda ersätts av denna enda registrering.
Två beteenden som är värda att känna till:
- Converter kräver sin plugin. Att lösa
DocumentConverterutanoptions.AddPlugin<ConverterPlugin>()kastar:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Pluginbehörighet valideras vid start. En saknad licens, gammal
TRIAL‑fil, eller betald licens utan en registrerad plugins kapacitet misslyckas vidAddDoconut()‑tid. Tillfälliga/Demo‑registreringar överlever sitt utgångsdatum, medan körningstidens grindar återkallar de utgångna funktionerna.
Health check integreras med den standard ASP.NET Core‑mekanismen — mappa den om du vill ha licenstillstånd på din health‑endpoint:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Lägger till Doconut page‑image middleware. Den svarar på varje begäran som bär en ?token=‑frågeparameter — sidor, miniatyrer, sök, annotationer, sidåtgärder (den fullständiga begärantabellen finns i Core Concepts → Hur visaren fungerar). När UnsafeMode är false, kopplas dokument‑säkerhetslagret in automatiskt före den.
Det tar inga argument. Att skicka en DoconutOptions‑instans här var den tidigare bibliotekets form och kompileras inte längre.
Referensexemplet dirigerar widgetens begäranden genom en sökvägsgren, och behåller den historiska begärandeformen:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Serverar den inbäddade JS, CSS, bilder och typsnitt på DoconutOptions.ResourcesPath (standard /doconut-res). Detta är filerna som Viewer.ReferenceCss() / ReferenceScripts() genererar taggar för.
Anropa alltid den innan UseDoconut(). Om visningsområdet förblir tomt och webbläsarkonsolen visar 404‑fel för /doconut-res/..., saknas detta anrop eller är felplacerat.
Detta är den stödjade ersättningen för att manuellt ansluta middleware för hantering av inbäddade resurser.
Serving from shared storage
Två ytterligare registreringar finns för distributioner där noden som renderar ett dokument inte nödvändigtvis är noden som serverar dess sidor. Båda täcks helt i Distribuerade distributioner; signaturerna är:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // valfri bakgrundspubliceringskö
IServiceCollection AddDoconutDistributedWidgets(...) // delad lagringsplats för widget-uppladdningarLäs‑sidan är en separat middleware från paketet Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) och WebFarmOptions finns inte i denna version. Se migrationsguide för mappingen inställning‑för‑inställning.
Ordering recap
app.UseRouting();
app.UseSession(); // krävs när UnsafeMode = false
app.UseDoconutResources(); // 1:a Doconut-anrop
app.UseDoconut(); // 2:a Doconut-anrop (eller via en MapWhen-gren)Var den här sidan hjälpsam?