DoconutExtensions
Enregistrement des services et du middleware
DoconutExtensions (namespace Doconut.Middleware) est la classe statique avec les trois appels que chaque hôte Doconut effectue : un enregistrement de service et deux enregistrements de middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // AVANT UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Construit le DoconutOptions, les valide en échec rapide (voir DoconutOptions → Validation du démarrage), et enregistre le graphe complet des services :
| Service | Durée de vie | Rôle |
|---|---|---|
DoconutOptions | Singleton | L'objet de configuration |
| Service de cache de session | Singleton | Token → cache de session (IMemoryCache est également enregistré) |
IDoconutLicenseService | Singleton | Licence chargée une fois au démarrage (priorité : LicenseStream → LicenseContent → LicensePath → recherche automatique) |
| Pipeline d'images de page | Singleton | Effectue le traitement d'images pour les pages (filigrane, rotation, mise à l'échelle, annotations) |
| Sécurité du document (magasin d'accès) | Singleton | Accorde la liaison token‑session |
Viewer | Transient | La façade publique d'ouverture/fermeture |
DocumentConverter | Transient | Facade de conversion — nécessite le plugin Converter |
DistributedDocumentPublisher | — | Publie les artefacts d'un document vers le stockage partagé |
Health check "doconut" | — | Signale l'état de licence/expiration via les contrôles de santé ASP.NET |
Il n'existe aucun appel équivalent dans la bibliothèque .NET Standard précédente. Elle construisait new Viewer(cache, accessor) par requête et passait les options au middleware ; les deux sont remplacés par cet enregistrement unique.
Deux comportements utiles à connaître :
- Le Converter nécessite son plugin. Résoudre
DocumentConvertersansoptions.AddPlugin<ConverterPlugin>()génère une exception :
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- L'entitlement du plugin est validé au démarrage. Une licence manquante, un fichier
TRIALhérité, ou une licence payante sans la capacité d'un plugin enregistré échoue au momentAddDoconut(). Les enregistrements temporaires/Demo survivent à leur date d'expiration, tandis que les garde-fous d'exécution révoquent les capacités expirées.
Le contrôle de santé s'intègre au mécanisme standard d'ASP.NET Core — mappez‑le si vous souhaitez l'état de licence sur votre point de terminaison de santé :
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Ajoute le middleware d'images de page Doconut. Il répond à chaque requête contenant un paramètre de requête ?token= — pages, miniatures, recherche, annotations, actions de page (le tableau complet des requêtes se trouve dans Concepts de base → Comment le visualiseur fonctionne). Lorsque UnsafeMode est false, la couche de sécurité du document est automatiquement branchée avant lui.
Il ne prend aucun argument. Passer une instance DoconutOptions ici était la forme de la bibliothèque précédente et ne compile plus.
L'exemple de référence dirige les requêtes du widget via une branche de chemin, conservant la forme historique des requêtes :
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Serre les JS, CSS, images et polices embarqués à DoconutOptions.ResourcesPath (par défaut /doconut-res). Ce sont les fichiers pour lesquels Viewer.ReferenceCss() / ReferenceScripts() émettent des balises.
Appelez‑le toujours avant UseDoconut(). Si la zone du visualiseur reste vide et que la console du navigateur affiche des 404 pour /doconut-res/..., cet appel est manquant ou mal placé.
Ceci est le remplacement pris en charge pour brancher manuellement le middleware de gestion des ressources embarquées.
Serving from shared storage
Deux enregistrements supplémentaires existent pour les déploiements où le nœud qui rend un document n'est pas forcément le nœud qui sert ses pages. Les deux sont couverts de bout en bout dans Déploiements distribués ; les signatures sont :
IServiceCollection AddDoconutDistributedAsyncPublish(...) // file d'attente de publication en arrière-plan opt-in
IServiceCollection AddDoconutDistributedWidgets(...) // magasin de support partagé pour les téléchargements de widgetsLa partie lecture est un middleware séparé du package Doconut.Clouds :
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) et WebFarmOptions n'existent pas dans cette version. Consultez le guide de migration pour le mappage paramètre par paramètre.
Ordering recap
app.UseRouting();
app.UseSession(); // requis lorsque UnsafeMode = false
app.UseDoconutResources(); // 1er appel Doconut
app.UseDoconut(); // 2e appel Doconut (ou via une branche MapWhen)Cette page était-elle utile ?