DoconutExtensions
Service and middleware registration
DoconutExtensions (namespace Doconut.Middleware) είναι η στατική κλάση με τις τρεις κλήσεις που κάνει κάθε κεντρικό σύστημα Doconut: μια εγγραφή υπηρεσίας και δύο εγγραφές middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Δημιουργεί το DoconutOptions, το επικυρώνει άμεσα (δείτε DoconutOptions → Επικύρωση εκκίνησης) και καταχωρεί το πλήρες γράφημα υπηρεσιών:
| Υπηρεσία | Διάρκεια ζωής | Ρόλος |
|---|---|---|
DoconutOptions | Μοναδικό | Το αντικείμενο διαμόρφωσης |
IViewerFactory | Μοναδικό | Χαρτογραφεί επεκτάσεις σε προβολείς μορφής |
IDocumentSessionManager | Μοναδικό | Token → cache συνεδρίας (IMemoryCache επίσης καταχωρείται) |
IDoconutLicenseService | Μοναδικό | Άδεια φορτώνεται μία φορά κατά την εκκίνηση (προτεραιότητα: LicenseStream → LicenseContent → LicensePath → αυτόματη αναζήτηση) |
PageImageService | Μοναδικό | Διαδικασία εικόνας σελίδας (υδατογράφημα/περιστροφή/κλιμάκωση/σχόλια) |
| Ασφάλεια εγγράφου (αποθήκη πρόσβασης) | Μοναδικό | Παραχωρήσεις για σύνδεση token-σε-συνεδρία |
Viewer | Προσωρινό | Δημόσια διεπαφή ανοίγματος/κλεισίματος |
DocumentConverter | Προσωρινό | Διεπαφή μετατροπής — απαιτεί το πρόσθετο Converter |
DistributedDocumentPublisher | — | Δημοσιεύει τα τεχνικά στοιχεία ενός εγγράφου σε κοινόχρηστη αποθήκευση |
Έλεγχος υγείας "doconut" | — | Αναφέρει την κατάσταση άδειας/λήξης μέσω ελέγχων υγείας ASP.NET |
Δεν υπάρχει αντίστοιχη κλήση στη προηγούμενη βιβλιοθήκη .NET Standard. Δημιούργησε new Viewer(cache, accessor) ανά αίτηση και πέρασε τις επιλογές στο middleware· και τα δύο αντικαθίστανται από αυτή τη μοναδική εγγραφή.
Δύο συμπεριφορές που αξίζει να γνωρίζετε:
- Ο Converter απαιτεί το πρόσθετό του. Η επίλυση του
DocumentConverterχωρίςoptions.AddPlugin<ConverterPlugin>()προκαλεί εξαίρεση:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Η δικαιοδοσία του πρόσθετου επικυρώνεται κατά την εκκίνηση. Μια ελλιπής άδεια, αρχείο
TRIALπαλαιού τύπου ή πληρωμένη άδεια χωρίς την αντίστοιχη δυνατότητα του καταχωρημένου πρόσθετου αποτυγχάνει κατά την κλήσηAddDoconut(). Οι προσωρινές/Δοκιμαστικές εγγραφές παραμένουν μετά την ημερομηνία λήξης, ενώ οι πύλες χρόνου εκτέλεσης ανακαλούν τις ληγμένες δυνατότητες.
Ο έλεγχος υγείας ενσωματώνεται με τον τυπικό μηχανισμό ASP.NET Core — χαρτογραφήστε τον αν θέλετε την κατάσταση της άδειας στο endpoint υγείας σας:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Προσθέτει το middleware εικόνας σελίδας Doconut. Απαντά σε κάθε αίτηση που περιέχει την παράμετρο ερωτήματος ?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(). Εάν η περιοχή του viewer παραμένει κενή και η κονσόλα του προγράμματος περιήγησης εμφανίζει 404 για /doconut-res/..., αυτή η κλήση λείπει ή είναι τοποθετημένη λανθασμένα.
Αυτή είναι η υποστηριζόμενη αντικατάσταση για τη χειροκίνητη ενσωμάτωση του middleware ενσωματωμένων πόρων με app.UseMiddleware<EmbeddedResourceMiddleware>().
Serving from shared storage
Δύο επιπλέον εγγραφές υπάρχουν για αναπτύξεις όπου ο κόμβος που δημιουργεί ένα έγγραφο δεν είναι απαραίτητα ο κόμβος που εξυπηρετεί τις σελίδες του. Και τα δύο καλύπτονται πλήρως στα Κατανεμημένες Αναπτύξεις; οι υπογραφές είναι:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...) // shared backing store for widget uploadsΗ πλευρά ανάγνωσης είναι ένα ξεχωριστό 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(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut(); // 2nd Doconut call (or via a MapWhen branch)Ήταν αυτή η σελίδα χρήσιμη;