DoconutExtensions
Registrace služeb a middleware
DoconutExtensions (namespace Doconut.Middleware) je statická třída se třemi voláními, která každý host Doconut provádí: jedno registrace služby a dvě registrace middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // PŘED UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Vytváří DoconutOptions, provádí jejich okamžitou validaci (viz DoconutOptions → Startup validation) a registruje celý graf služeb:
| Služba | Životnost | Role |
|---|---|---|
DoconutOptions | Singleton | Konfigurační objekt |
| Služba mezipaměti relace | Singleton | Token → mezipaměť relace (IMemoryCache je také registrován) |
IDoconutLicenseService | Singleton | Licence načtena jednou při spuštění (precedence: LicenseStream → LicenseContent → LicensePath → auto-search) |
| Pipeline pro obrázky stránek | Singleton | Provádí zpracování obrázků pro stránky (vodoznak, otáčení, škálování, anotace) |
| Bezpečnost dokumentu (úložiště přístupu) | Singleton | Povolení pro vazbu token‑session |
Viewer | Transient | Veřejná fasáda pro otevření/uzavření |
DocumentConverter | Transient | Fasáda konverze — vyžaduje plugin Converter |
DistributedDocumentPublisher | — | Publikuje artefakty dokumentu do sdíleného úložiště |
Health check "doconut" | — | Zpráva o stavu licence/expirace prostřednictvím ASP.NET health checks |
V předchozí knihovně .NET Standard neexistuje ekvivalentní volání. Konstrukovala new Viewer(cache, accessor) na požadavek a předávala možnosti middleware; oba jsou nahrazeny touto jedinou registrací.
Dvě chování, která stojí za vědění:
- Converter vyžaduje svůj plugin. Vyřešení
DocumentConverterbezoptions.AddPlugin<ConverterPlugin>()vyvolá výjimku:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Oprávnění pluginu je ověřováno při startu. Chybějící licence, starý soubor
TRIALnebo placená licence bez registrované schopnosti pluginu selže v časeAddDoconut(). Dočasné/Demo registrace přežijí datum expirace, zatímco runtime brány odeberou vypršené schopnosti.
Health check integruje se standardním mechanismem ASP.NET Core — namapujte jej, pokud chcete stav licence na vašem health endpointu:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Přidává middleware Doconut pro obrázky stránek. Odpovídá na každý požadavek nesoucí parametr dotazu ?token= — stránky, náhledy, vyhledávání, anotace, akce stránek (úplná tabulka požadavků je v Základní koncepty → Jak funguje prohlížeč). Když je UnsafeMode false, vrstva zabezpečení dokumentu je automaticky zapojena před ní.
Nevyžaduje žádné argumenty. Předání instance DoconutOptions zde bylo tvarem předchozí knihovny a již se nekompiluje.
Referenční ukázka směruje požadavky widgetu přes větev cesty, zachovávajíc historický tvar požadavku:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Obsluhuje vložené JS, CSS, obrázky a fonty na DoconutOptions.ResourcesPath (výchozí /doconut-res). Toto jsou soubory, pro které Viewer.ReferenceCss() / ReferenceScripts() generují značky.
Vždy jej volejte před UseDoconut(). Pokud je oblast prohlížeče prázdná a konzole prohlížeče ukazuje 404 pro /doconut-res/..., toto volání chybí nebo je na špatném místě.
Jedná se o podporovanou náhradu za ruční zapojení middleware pro zpracování vložených zdrojů.
Serving from shared storage
Existují další dvě registrace pro nasazení, kde uzel, který vykresluje dokument, není nutně uzel, který obsluhuje jeho stránky. Obě jsou kompletně pokryty v Distributed Deployments; podpisy jsou:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opt-in fronta publikování na pozadí
IServiceCollection AddDoconutDistributedWidgets(...) // sdílené úložiště pro nahrávání widgetůČtecí část je samostatný middleware z balíčku Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) a WebFarmOptions v tomto vydání neexistují. Viz průvodce migrací pro mapování nastavení po nastavení.
Ordering recap
app.UseRouting();
app.UseSession(); // vyžadováno, když UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut volání
app.UseDoconut(); // 2nd Doconut volání (nebo přes větev MapWhen)Byla tato stránka užitečná?