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(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Construit les DoconutOptions, les valide immédiatement (voir DoconutOptions → Validation au démarrage), et enregistre le graphe complet des services :
| Service | Durée de vie | Rôle |
|---|---|---|
DoconutOptions | Singleton | L'objet de configuration |
IViewerFactory | Singleton | Mappe les extensions aux visionneuses de format |
IDocumentSessionManager | Singleton | Cache de session token → session (IMemoryCache est également enregistré) |
IDoconutLicenseService | Singleton | Licence chargée une fois au démarrage (priorité : LicenseStream → LicenseContent → LicensePath → recherche automatique) |
PageImageService | Singleton | Pipeline d'image de page (filigrane/rotation/redimensionnement/annotations) |
| Document security (access store) | Singleton | Autorisation pour 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) à chaque requête et passait les options au middleware ; les deux sont remplacés par cet enregistrement unique.
Deux comportements utiles à connaître :
- Le convertisseur nécessite son plugin. Résoudre
DocumentConvertersansoptions.AddPlugin<ConverterPlugin>()génère :
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- L'éligibilité du plugin est validée au démarrage. Une licence manquante, un fichier
TRIALhérité, ou une licence payante sans la capacité du plugin enregistré échoue au moment deAddDoconut(). 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'image de page Doconut. Il répond à chaque requête contenant le 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 Viewer fonctionne). Lorsque UnsafeMode est false, la couche de sécurité du document est automatiquement branchée avant celui‑ci.
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, en 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)Desserve les JS, CSS, images et polices intégré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 viewer 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 supporté pour brancher manuellement le middleware de ressources intégrées avec app.UseMiddleware<EmbeddedResourceMiddleware>().
Serving from shared storage
Deux enregistrements supplémentaires existent pour les déploiements où le nœud qui rend un document n'est pas nécessairement celui qui sert ses pages. Les deux sont couverts de bout en bout dans Déploiements distribués ; les signatures sont :
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...) // shared backing store for widget uploadsLe côté 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 mapping paramètre par paramètre.
Ordering recap
app.UseRouting();
app.UseSession(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut(); // 2nd Doconut call (or via a MapWhen branch)Cette page était-elle utile ?