DoconutErweiterungen

Registrierung von Diensten und Middleware

DoconutExtensions (Namespace Doconut.Middleware) ist die statische Klasse mit den drei Aufrufen, die jeder Doconut-Host macht: eine Service-Registrierung und zwei Middleware-Registrierungen.

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

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

Erstellt das DoconutOptions, validiert sie sofort (siehe DoconutOptions → Startup-Validierung) und registriert den vollständigen Service-Graphen:

DienstLebensdauerRolle
DoconutOptionsSingletonDas Konfigurationsobjekt
Session-Cache-DienstSingletonToken → Session-Cache (IMemoryCache ist ebenfalls registriert)
IDoconutLicenseServiceSingletonLizenz, die einmal beim Start geladen wird (Priorität: LicenseStream → LicenseContent → LicensePath → Auto‑Suche)
Page-Image-PipelineSingletonFührt Bildverarbeitung für Seiten durch (Wasserzeichen, Drehen, Skalieren, Anmerkungen)
Dokumentensicherheit (Zugriffs‑Store)SingletonGewährt Bindungen von Token zu Session
ViewerTransientDie öffentliche Öffnen/Schließen‑Fassade
DocumentConverterTransientKonvertierungs‑Fassade — erfordert das Converter‑Plugin
DistributedDocumentPublisher—Veröffentlicht die Artefakte eines Dokuments im gemeinsamen Speicher
Health‑Check "doconut"—Meldet Lizenz‑/Ablaufstatus über ASP.NET Health Checks

Es gibt keinen entsprechenden Aufruf in der vorherigen .NET Standard‑Bibliothek. Sie erstellte new Viewer(cache, accessor) pro Anfrage und übergab Optionen an die Middleware; beide werden durch diese einzelne Registrierung ersetzt.

Zwei Verhaltensweisen, die es zu kennen gilt:

  • Converter erfordert sein Plugin. Das Auflösen von DocumentConverter ohne options.AddPlugin<ConverterPlugin>() wirft:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • Plugin‑Berechtigung wird beim Start validiert. Eine fehlende Lizenz, eine veraltete TRIAL‑Datei oder eine kostenpflichtige Lizenz ohne registrierte Plugin‑Fähigkeit schlägt zur AddDoconut()‑Zeit fehl. Temporäre/Demo‑Registrierungen überleben ihr Ablaufdatum, während Laufzeit‑Gates die abgelaufenen Fähigkeiten widerrufen.

Der Health‑Check integriert sich in den Standard‑ASP.NET Core‑Mechanismus — binden Sie ihn ein, wenn Sie den Lizenzstatus an Ihrem Health‑Endpunkt sehen möchten:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Fügt die Doconut Page‑Image‑Middleware hinzu. Sie beantwortet jede Anfrage, die einen ?token=‑Abfrageparameter enthält — Seiten, Thumbnails, Suche, Anmerkungen, Seitenaktionen (die vollständige Anfragetabelle befindet sich in Core Concepts → How the Viewer Works). Wenn UnsafeMode false ist, wird die Dokumentensicherheits‑Schicht automatisch davor eingebunden.

Sie nimmt keine Argumente entgegen. Das Übergeben einer DoconutOptions‑Instanz hier war das Muster der vorherigen Bibliothek und kompiliert nicht mehr.

Das Referenzbeispiel leitet die Anfragen des Widgets über einen Pfadzweig, wobei die historische Anfragestruktur beibehalten wird:

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

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

Stellt das eingebettete JS, CSS, Bilder und Schriftarten unter DoconutOptions.ResourcesPath (Standard /doconut-res) bereit. Dies sind die Dateien, für die Viewer.ReferenceCss() / ReferenceScripts() Tags erzeugen.

Rufen Sie es immer vor UseDoconut() auf. Wenn der Viewer‑Bereich leer bleibt und die Browser‑Konsole 404‑Fehler für /doconut-res/... anzeigt, fehlt dieser Aufruf oder ist falsch platziert.

Dies ist der unterstützte Ersatz für das manuelle Einbinden der Middleware zur Behandlung eingebetteter Ressourcen.

Bereitstellung aus gemeinsamem Speicher

Zwei weitere Registrierungen existieren für Deployments, bei denen der Knoten, der ein Dokument rendert, nicht unbedingt der Knoten ist, der dessen Seiten bereitstellt. Beide werden end‑to‑end in Distributed Deployments behandelt; die Signaturen sind:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // opt-in Hintergrund-Veröffentlichungswarteschlange
IServiceCollection AddDoconutDistributedWidgets(...)        // gemeinsamer Sicherungsspeicher für widget-Uploads

Die Leseseite ist eine separate Middleware aus dem Doconut.Clouds‑Paket:

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

UseDoconutWebFarm(...) und WebFarmOptions existieren in dieser Version nicht. Siehe den Migrationsleitfaden für die Einstellung‑für‑Einstellung‑Zuordnung.

Zusammenfassung der Reihenfolge

csharp
app.UseRouting();
app.UseSession();          // erforderlich, wenn UnsafeMode = false
app.UseDoconutResources(); // 1. Doconut-Aufruf
app.UseDoconut();          // 2. Doconut-Aufruf (oder über einen MapWhen-Zweig)

War diese Seite hilfreich?