Σύστημα Προσθέτων
Επεκτείνετε τον προβολέα με πρόσθετα
Ο πυρήνας του Doconut παραμένει ελαφρύς· η προαιρετική λειτουργικότητα παρέχεται ως plugins — ξεχωριστά πακέτα NuGet που συνεισφέρουν προβολείς ή υπηρεσίες και ενεργοποιούνται από την άδειά σας. Αυτή η σελίδα εξηγεί το μοντέλο καταχώρισης, πώς λειτουργεί ο περιορισμός άδειας σε χρόνο εκτέλεσης, και πώς να ενσωματώσετε τον δικό σας προβολέα.
Καταχώριση ενός πρόσθετου
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() δημιουργεί μια παρουσία του πρόσθετου και καλεί την Register callback του στο μητρώο πρόσθετων που διατηρείται στο DoconutOptions. Ό,τι συνεισφέρει ένα πρόσθετο επισημαίνεται με την απαιτούμενη δυνατότητα του πρόσθετου. Το AddDoconut() επικυρώνει άμεσα τα καταχωρημένα πρόσθετα: μια ελλιπής άδεια, παλιό αρχείο TRIAL ή πληρωμένη άδεια χωρίς τη δυνατότητα αποτυγχάνει την εκκίνηση με InvalidOperationException. Μια εγγραφή Temporary/Demo διατηρείται μετά τη λήξη, αλλά οι δυνατότητες χρόνου εκτέλεσης της ανακαλούνται μετά την ημερομηνία λήξης.
Η σύμβαση
Ένα πρόσθετο υλοποιεί μια σκόπιμα μικρή διεπαφή:
public interface IDoconutPlugin
{
string Name { get; } // e.g. "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // the license gate
void Register(IDoconutPluginBuilder builder); // contribute viewers/services
}Μέσα στη Register, ο builder δέχεται δύο είδη συνεισφορών:
builder.RegisterViewer(".dcm", () => new DicomViewer())— ένας προβολέας για μια επέκταση αρχείου,builder.RegisterService<TContract>(() => …)— μια τυποποιημένη υπηρεσία που άλλα μέρη της αλυσίδας μπορούν να αναζητήσουν.
Δυνατότητες και περιορισμός
Οι δυνατότητες είναι οι μονάδες της άδειας. Τα Converter και Dicom παρέχονται ως πρόσθετα με επιλογή· τα Search και Annotation είναι ενσωματωμένα χαρακτηριστικά που περιορίζονται με τον ίδιο τρόπο. Ο βασικός προβολέας δεν είναι δυνατότητα — είναι η προαπαιτούμενη προϋπόθεση, εκτεθειμένη ως IsViewerLicensed στην υπηρεσία άδειας.
Η επικύρωση κατά την εκκίνηση συνήθως αποτρέπει ένα μη αδειοδοτημένο πρόσθετο να εισέλθει στην αλυσίδα αιτήσεων. Η εργοστασιακή μονάδα προβολέα εφαρμόζει επίσης δύο αμυντικούς κανόνες χρόνου εκτέλεσης, που έχουν σημασία αν η δικαιοδοσία αλλάξει μετά την εκκίνηση:
- Το πρόσθετο αντικαθιστά έναν ενσωματωμένο προβολέα (ένα πρόσθετο διεκδικεί μια επέκταση που επίσης διαχειρίζεται το ενσωματωμένο μητρώο): με την αδειοδοτημένη δυνατότητα, ο προβολέας του πρόσθετου κερδίζει· χωρίς αυτήν, το Doconut επιστρέφει σιωπηλά στον ενσωματωμένο προβολέα. Οι χρήστες εξακολουθούν να βλέπουν το έγγραφό τους — απλώς δεν λαμβάνουν τη λειτουργία του πρόσθετου.
- Μορφή μόνο-πρόσθετου (π.χ.
.dcm— το DICOM δεν έχει ενσωματωμένο προβολέα): χωρίς τη δυνατότητα η κλήση ανοίγματος αποτυγχάνει σκληρά:
LicenseException: This document type requires the 'Dicom' plugin license.Μια ενεργή Temporary άδεια χορηγεί κάθε δυνατότητα (με καθαρή, χωρίς υδατογράφημα βασική προβολή). Αυτό είναι μια κλασική πηγή εκπλήξεων κατά την έναρξη: η καταχώριση των ίδιων πρόσθετων με μια αγορασμένη άδεια που παραλείπει μία από τις δυνατότητές τους κάνει το AddDoconut() να αποτύχει κατά την εκκίνηση. Συγκρίνετε το IsCapabilityGranted(...) με το πλάνο σας πριν την ανάπτυξη. Το αντίθετο: με καμία άδεια, δεν χορηγείται τίποτα — μια ελλιπής άδεια δεν είναι Temporary άδεια.
Ο ίδιος περιορισμός εμφανίζεται και στην πλευρά του πελάτη: τα Viewer.ReferenceScripts() και ReferenceCss() δημιουργούν τα πακέτα script/style για τις δυνατότητες που περιορίζονται από την άδεια (search, annotation, …) μόνο όταν η άδεια τις ενεργοποιεί, ώστε το UI του widget να παραμένει συνεπές με ό,τι θα κάνει πραγματικά ο διακομιστής.
Χάρτης λειτουργιών και πρόσθετων
Η διεπαφή προϊόντος χρησιμοποιεί το “plugin” ως ευρύ ετικέτα λειτουργίας, αλλά η καταχώριση στον διακομιστή διαφέρει:
| Λειτουργία | Πώς ενεργοποιείται | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Annotation | Ενσωματωμένο στον προβολέα· περιλαμβάνει πόρους σχολιασμού | Annotation | Δημιουργία μέσω προγράμματος περιήγησης, διατήρηση συνεδρίας και εξαγωγές με ενσωματωμένο υδατογράφημα |
| Search | Ενσωματωμένο σε προβολείς μορφών με δυνατότητα αναζήτησης· περιλαμβάνει πόρους αναζήτησης και ενεργοποιεί εξαγωγή όπου απαιτείται | Search | Φυσικός ευρετήριο κειμένου, επισημάνσεις και πλοήγηση αποτελεσμάτων |
| Converter | Εγκαταστήστε Doconut.NET8.Converter και καταχωρίστε ConverterPlugin | Converter | Υπηρεσία μετατροπής C# και προαιρετικό web widget |
| DICOM | Εγκαταστήστε Doconut.NET8.Dicom και καταχωρίστε DicomPlugin | Dicom | Προβολή ιατρικών εικόνων για .dcm και .ima |
Κυκλοφορημένα πακέτα πρόσθετων
| Πρόσθετο | Πακέτο | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Converter | Doconut.NET8.Converter | Converter | Δυνατότητα μετατροπής εγγράφων |
| DICOM | Doconut.NET8.Dicom | Dicom | Προβολή ιατρικών εικόνων (.dcm — μορφή μόνο-πρόσθετου) |
Κάθε ένα έχει μια αφιερωμένη σελίδα κάτω από Plugins με τη διαμόρφωση και τη χρήση του.
Προσαρμοσμένοι προβολείς — ο δικός σας διαχειριστής μορφής
Μπορείτε να ενσωματώσετε έναν προβολέα στην αλυσίδα χωρίς να γράψετε πακέτο πρόσθετου, απευθείας από το Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // implements IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // optional default config
});Οι προσαρμοσμένοι προβολείς έχουν προτεραιότητα πάνω από τα πάντα — τόσο τα ενσωματωμένα όσο και τα πρόσθετα — και δεν περιορίζονται από την άδεια (είναι ο κώδικάς σας). Η εργοστασιακή μονάδα επιστρέφει σε ένα ImageConfig όταν δεν παρέχετε προεπιλεγμένη διαμόρφωση.
Συμπεράσματα
- Τα πρόσθετα καταχωρούνται ρητά και η
LicenseCapabilityτους επικυρώνεται κατά τοAddDoconut()— η έλλειψη ή ανεπαρκής μη-προσωρινή δικαιοδοσία αποτυγχάνει άμεσα. - Τα πρόσθετα τύπου αντικατάστασης υποχωρούν ομαλά· οι μορφές μόνο-πρόσθετου αποτυγχάνουν με
LicenseException. - Μια ενεργή Temporary άδεια ξεκλειδώνει τα πάντα· η παραγωγική άδεια ξεκλειδώνει ό,τι αγοράσατε. Επαληθεύστε με το
IDoconutLicenseServiceπριν τη διανομή.
Ήταν αυτή η σελίδα χρήσιμη;