DoconutExtensions
Καταχώρηση υπηρεσιών και middleware
DoconutExtensions (namespace Doconut.Middleware) είναι η στατική κλάση με τις τρεις κλήσεις που κάνει κάθε κεντρικός Doconut: μία καταχώρηση υπηρεσίας και δύο καταχωρίσεις middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // ΠΡΙΝ UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Δημιουργεί το DoconutOptions, τα επικυρώνει άμεσα (δείτε DoconutOptions → Startup validation), και καταχωρεί το πλήρες γράφημα υπηρεσιών:
| Υπηρεσία | Διάρκεια ζωής | Ρόλος |
|---|---|---|
DoconutOptions | Singleton | Το αντικείμενο διαμόρφωσης |
| Υπηρεσία προσωρινής μνήμης συνεδρίας | Singleton | Token → προσωρινή μνήμη συνεδρίας (το IMemoryCache επίσης καταχωρείται) |
IDoconutLicenseService | Singleton | Άδεια που φορτώνεται μία φορά κατά την εκκίνηση (προτεραιότητα: LicenseStream → LicenseContent → LicensePath → αυτόματη αναζήτηση) |
| Διαδικασία σελίδας-εικόνας | Singleton | Εκτελεί επεξεργασία εικόνας για σελίδες (υδατογράφημα, περιστροφή, κλιμάκωση, σημειώσεις) |
| Ασφάλεια εγγράφου (αποθήκευση πρόσβασης) | Singleton | Δικαιώματα για σύνδεση token-σε-συνεδρία |
Viewer | Transient | Η δημόσια διεπαφή ανοίγματος/κλεισίματος |
DocumentConverter | Transient | Διεπαφή μετατροπής — απαιτεί το plugin Converter |
DistributedDocumentPublisher | — | Δημοσιεύει τα τεχνικά αρχεία ενός εγγράφου στην κοινόχρηστη αποθήκευση |
Health check "doconut" | — | Αναφέρει την κατάσταση άδειας/λήξης μέσω ελέγχων υγείας ASP.NET |
Δεν υπάρχει αντίστοιχη κλήση στη προηγούμενη βιβλιοθήκη .NET Standard. Δημιούργησε το new Viewer(cache, accessor) ανά αίτηση και πέρασε επιλογές στο middleware· και τα δύο αντικαθίστανται από αυτή τη μοναδική καταχώρηση.
Δύο συμπεριφορές που αξίζει να γνωρίζετε:
- Ο Converter απαιτεί το plugin του. Η επίλυση του
DocumentConverterχωρίς τοoptions.AddPlugin<ConverterPlugin>()προκαλεί εξαίρεση:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Η δικαιοδοσία του plugin επικυρώνεται κατά την εκκίνηση. Μια ελλιπής άδεια, αρχείο legacy
TRIAL, ή πληρωμένη άδεια χωρίς καταχωρημένη δυνατότητα plugin αποτυγχάνει στη χρονική στιγμήAddDoconut(). Οι προσωρινές/Δοκιμαστικές καταχωρίσεις παραμένουν μετά την ημερομηνία λήξης, ενώ οι πύλες χρόνου εκτέλεσης ανακαλούν τις ληγμένες δυνατότητες.
Ο έλεγχος υγείας ενσωματώνεται με τον τυπικό μηχανισμό ASP.NET Core — χαρτογραφήστε τον αν θέλετε την κατάσταση της άδειας στο endpoint υγείας σας:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Προσθέτει το middleware Doconut page-image. Απαντά σε κάθε αίτηση που περιέχει την παράμετρο ερωτήματος ?token= — σελίδες, μικρογραφίες, αναζήτηση, σημειώσεις, ενέργειες σελίδας (ο πλήρης πίνακας αιτήσεων βρίσκεται στα Core Concepts → How the Viewer Works). Όταν το UnsafeMode είναι false, το επίπεδο ασφάλειας εγγράφου ενσωματώνεται αυτόματα πριν από αυτό.
Δεν δέχεται ορίσματα. Η μεταβίβαση ενός αντικειμένου DoconutOptions εδώ ήταν η μορφή της προηγούμενης βιβλιοθήκης και πλέον δεν μεταγλωττίζεται.
Το δείγμα αναφοράς δρομολογεί τα αιτήματα του widget μέσω ενός κλάδου διαδρομής, διατηρώντας το ιστορικό σχήμα αιτήματος:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Εξυπηρετεί τα ενσωματωμένα JS, CSS, εικόνες και γραμματοσειρές στο DoconutOptions.ResourcesPath (προεπιλογή /doconut-res). Αυτά είναι τα αρχεία για τα οποία το Viewer.ReferenceCss() / ReferenceScripts() δημιουργούν ετικέτες.
Πάντα καλέστε το πριν από το UseDoconut(). Εάν η περιοχή προβολής παραμένει κενή και η κονσόλα του προγράμματος περιήγησης εμφανίζει 404 για το /doconut-res/..., αυτή η κλήση λείπει ή είναι τοποθετημένη λανθασμένα.
Αυτή είναι η υποστηριζόμενη αντικατάσταση για τη χειροκίνητη ενσωμάτωση του middleware διαχείρισης ενσωματωμένων πόρων.
Serving from shared storage
Δύο επιπλέον καταχωρίσεις υπάρχουν για αναπτύξεις όπου ο κόμβος που αποδίδει ένα έγγραφο δεν είναι απαραίτητα ο κόμβος που εξυπηρετεί τις σελίδες του. Και οι δύο καλύπτονται πλήρως στο Distributed Deployments; οι υπογραφές είναι:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // εγγραφή σε ουρά δημοσίευσης παρασκηνίου
IServiceCollection AddDoconutDistributedWidgets(...) // κοινόχρηστη αποθήκη υποστήριξης για μεταφορτώσεις widgetΗ πλευρά ανάγνωσης είναι ένα ξεχωριστό middleware από το πακέτο Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) και WebFarmOptions δεν υπάρχουν σε αυτή την έκδοση. Δείτε τον οδηγό μετάβασης για τη χαρτογράφηση ρύθμισης-ανά-ρύθμιση.
Ordering recap
app.UseRouting();
app.UseSession(); // απαιτείται όταν UnsafeMode = false
app.UseDoconutResources(); // 1η κλήση Doconut
app.UseDoconut(); // 2η κλήση Doconut (ή μέσω κλάδου MapWhen)Ήταν αυτή η σελίδα χρήσιμη;