Σύστημα Πρόσθετων
Επεκτείνετε τον προβολέα με πρόσθετα
Ο πυρήνας του Doconut παραμένει ελαφρύς· η προαιρετική λειτουργικότητα παρέχεται ως plugins — ξεχωριστά πακέτα NuGet που συνεισφέρουν προβολείς ή υπηρεσίες και ενεργοποιούνται από την άδειά σας. Αυτή η σελίδα εξηγεί το μοντέλο καταχώρησης, τι συμβαίνει κατά την εκκίνηση όταν μια άδεια δεν καλύπτει ένα πρόσθετο, και πώς να ενσωματώσετε τον δικό σας προβολέα.
Καταχώρηση ενός πρόσθετου
Κάθε πακέτο πρόσθετου εκθέτει μία κλάση plugin. Καταχωρήστε το μία φορά, στο Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// Ένα καταχωρημένο πρόσθετο του οποίου λείπει η άδεια πετάει εδώ, στο Application_Start, και το
// ο ιστότοπος τότε απαντά κάθε αίτηση με ένα κενό 500. Ο λόγος είναι στο αρχείο καταγραφής συμβάντων των Windows.AddPlugin<TPlugin>() δημιουργεί το πρόσθετο και του επιτρέπει να καταχωρήσει τις συνεισφορές του με το DoconutOptions. Όλα όσα συνεισφέρει ένα πρόσθετο επισημαίνονται με την απαιτούμενη δυνατότητα του πρόσθετου, και το DoconutHost.Initialize ελέγχει κάθε καταχωρημένο πρόσθετο σε σχέση με την άδεια πριν ο ιστότοπος εξυπηρετήσει το πρώτο του αίτημα.
Η έλλειψη άδειας πρόσθετου σταματά τον ιστότοπο
Όταν καμία ενεργή άδεια δεν παρέχει τη δυνατότητα ενός καταχωρημένου πρόσθετου — καμία άδεια καθόλου, ένα παλιό αρχείο TRIAL, ή μια επί πληρωμή άδεια χωρίς αυτή τη δυνατότητα — το DoconutHost.Initialize ρίχνει το InvalidOperationException από το Application_Start:
The Converter plugin is registered via AddPlugin but no active license grants Converter.
Remove the AddPlugin<...>() call or install a license (or trial/demo) that includes Converter.Στο System.Web, μια εξαίρεση στο Application_Start δεν παράγει σελίδα σφάλματος. Κάθε αίτημα απαντά με ένα κενό 500, το αρχείο καταγραφής IIS δεν εμφανίζει κάτι χρήσιμο, και το μήνυμα εμφανίζεται μόνο στο αρχείο καταγραφής συμβάντων των Windows (Application log, source ASP.NET). Όταν ένας ιστότοπος σταματά να ανταποκρίνεται αμέσως μετά την προσθήκη μιας γραμμής AddPlugin, ελέγξτε πρώτα τα αρχεία άδειας στο wwwroot — δείτε License Setup.
Η σύμβαση
Ένα πρόσθετο υλοποιεί μια σκόπιμα μικρή διεπαφή:
public interface IDoconutPlugin
{
string Name { get; } // π.χ. "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // η πύλη άδειας
void Register(IDoconutPluginBuilder builder); // συνεισφέρετε προβολείς/υπηρεσίες
}Μέσα στο Register, ο κατασκευαστής δέχεται δύο είδη συνεισφοράς:
builder.RegisterViewer(".dcm", () => new DicomViewer())— ένας προβολέας για μια επέκταση αρχείου,builder.RegisterService<TContract>(() => …)— μια τυποποιημένη υπηρεσία που άλλα μέρη της αλυσίδας μπορούν να αναζητήσουν.
Δυνατότητες και περιορισμός
Οι δυνατότητες είναι οι μονάδες της άδειας. Τα Converter και Dicom παρέχονται ως πρόσθετα με επιλογή ενεργοποίησης· τα Search και Annotation είναι ενσωματωμένες λειτουργίες που περιορίζονται με τον ίδιο τρόπο. Ο βασικός προβολέας δεν είναι δυνατότητα — είναι η προαπαιτούμενη, εκτεθειμένη ως IsViewerLicensed στην υπηρεσία άδειας.
Η επικύρωση κατά την εκκίνηση συνήθως κρατά ένα μη αδειοδοτημένο πρόσθετο εκτός της αλυσίδας αιτημάτων. Η εργοστασιακή μονάδα προβολέα εφαρμόζει επίσης δύο αμυντικούς κανόνες, που έχουν σημασία εάν τα δικαιώματα αλλάξουν ενώ ο ιστότοπος λειτουργεί:
- Ένα πρόσθετο που αντικαθιστά έναν ενσωματωμένο προβολέα (διεκδικεί μια επέκταση που επίσης διαχειρίζεται ένας ενσωματωμένος προβολέας): με την αδειοδοτημένη δυνατότητα, ο προβολέας του πρόσθετου κερδίζει· χωρίς αυτήν, το Doconut επιστρέφει στον ενσωματωμένο προβολέα. Οι χρήστες εξακολουθούν να βλέπουν το έγγραφό τους· απλώς δεν λαμβάνουν τη συμπεριφορά του πρόσθετου.
- Μορφή μόνο-πρόσθετου (
.dcmκαι.ima— το DICOM δεν έχει ενσωματωμένο προβολέα): χωρίς τη δυνατότητα, το άνοιγμα αποτυγχάνει:
LicenseException: This document type requires the 'Dicom' plugin license.Μια ενεργή Temporary άδεια χορηγεί κάθε δυνατότητα. Αυτό είναι μια κλασική έκπληξη κατά την έναρξη λειτουργίας: οι ίδιες γραμμές AddPlugin που εκτελέστηκαν κατά την αξιολόγηση σταματούν τον ιστότοπο όταν η αγορασμένη άδεια παραλείπει μία από αυτές τις δυνατότητες. Συγκρίνετε το IsCapabilityGranted(...) με ό,τι αγοράσατε πριν την ανάπτυξη. Με καμία άδεια καθόλου, δεν χορηγείται τίποτα — μια ελλιπής άδεια δεν είναι Temporary άδεια.
Ο ίδιος περιορισμός φθάνει στον περιηγητή: τα Viewer.ReferenceScripts() και ReferenceCss() εκδίδουν τα αρχεία για λειτουργίες περιορισμένες με άδεια (Search, Annotation) μόνο όταν η άδεια τα χορηγεί, έτσι η σελίδα ποτέ δεν προσφέρει μια λειτουργία που ο διακομιστής θα αρνηθεί.
Χάρτης λειτουργιών και πρόσθετων
| Λειτουργία | Πώς ενεργοποιείται | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Annotation | Ενσωματωμένο στον προβολέα· συμπεριλάβετε τους πόρους σχολιασμού | Annotation | Δημιουργία στο πρόγραμμα περιήγησης, διατήρηση συνεδρίας, εξαγωγές με ενσωματωμένο υδατογράφημα |
| Search | Ενσωματωμένο σε προβολείς μορφών με δυνατότητα αναζήτησης· συμπεριλάβετε τους πόρους αναζήτησης | Search | Φυσικός δείκτης κειμένου, επισημάνσεις, πλοήγηση αποτελεσμάτων |
| Converter | Εγκαταστήστε το Doconut.NETFramework.Converter και καταχωρήστε το ConverterPlugin | Converter | Υπηρεσία μετατροπής C# και ένα προαιρετικό web widget |
| DICOM | Εγκαταστήστε το Doconut.NETFramework.Dicom και καταχωρήστε το DicomPlugin | Dicom | Προβολή ιατρικών εικόνων για .dcm και .ima |
Τα Annotation και Search δεν χρησιμοποιούν το AddPlugin<TPlugin>(). Τα Converter και DICOM έχουν κάθε ένα σελίδα κάτω από Plugins με τη διαμόρφωση και τη χρήση τους. Σε αυτό το πακέτο, το DICOM αποδίδει σελίδες, πλαίσια και κινούμενα σχέδια, αλλά δεν διαβάζει τεχνικά μεταδεδομένα — δείτε DICOM Plugin.
Προσαρμοσμένοι προβολείς — ο δικός σας διαχειριστής μορφής
Μπορείτε να ενσωματώσετε έναν προβολέα στην αλυσίδα χωρίς να γράψετε πακέτο πρόσθετου, απευθείας στο Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // υλοποιεί IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // προαιρετική προεπιλεγμένη διαμόρφωση
});Οι προσαρμοσμένοι προβολείς έχουν προτεραιότητα πάνω από τα πάντα — τόσο ενσωματωμένα όσο και πρόσθετα — και δεν περιορίζονται από άδεια: είναι ο κώδικάς σας. Όταν δεν παρέχετε προεπιλεγμένη διαμόρφωση, η εργοστασιακή μονάδα χρησιμοποιεί ένα ImageConfig.
Συμπεράσματα
- Τα plugins καταχωρούνται ρητά στο
DoconutHost.Initialize, και οι δυνατότητές τους επικυρώνονται εκεί· μια ελλιπής δικαιούσα σταματά τον ιστότοπο με ένα κενό500του οποίου ο λόγος βρίσκεται στο αρχείο καταγραφής συμβάντων των Windows. - Τα plugins τύπου override υποβαθμίζονται ομαλά· οι μορφές μόνο-πρόσθετου αποτυγχάνουν με ένα
LicenseException. - Μια ενεργή Temporary άδεια ξεκλειδώνει τα πάντα· η παραγωγική ξεκλειδώνει ό,τι αγοράσατε. Ελέγξτε με το
IDoconutLicenseServiceπριν τη διανομή.
Ήταν αυτή η σελίδα χρήσιμη;