Σύστημα Πρόσθετων
Επεκτείνετε το πρόγραμμα προβολής με πρόσθετα
Ο πυρήνας του Doconut παραμένει ελαφρύς· η προαιρετική λειτουργικότητα παρέχεται ως πρόσθετα — ξεχωριστά πακέτα 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. Μια εγγραφή Προσωρινή/Δοκιμαστική διατηρείται μετά τη λήξη, αλλά οι δυνατότητες χρόνου εκτέλεσης της ανακαλούνται μετά την ημερομηνία λήξης.
Η σύμβαση
Ένα πρόσθετο υλοποιεί μια σκόπιμα μικρή διεπαφή:
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— το DICOM δεν έχει ενσωματωμένο προβολέα): χωρίς τη δυνατότητα η κλήση ανοίγματος αποτυγχάνει σκληρά:
LicenseException: This document type requires the 'Dicom' plugin license.Μια ενεργή προσωρινή άδεια χορηγεί κάθε δυνατότητα (με καθαρή, χωρίς υδατογράφημα βασική προβολή). Αυτό είναι μια κλασική πηγή εκπλήξεων κατά την έναρξη λειτουργίας: η καταχώρηση των ίδιων πρόσθετων με μια αγορασμένη άδεια που παραλείπει μία από τις δυνατότητές τους κάνει το AddDoconut() να αποτύχει κατά την εκκίνηση. Συγκρίνετε το IsCapabilityGranted(...) με το πλάνο σας πριν την ανάπτυξη. Το αντίστροφο: με καθόλου άδεια, τίποτα δεν χορηγείται — μια ελλιπής άδεια δεν είναι προσωρινή άδεια.
Ο ίδιος περιορισμός εμφανίζεται στην πλευρά του πελάτη: Viewer.ReferenceScripts() και ReferenceCss() εκδίδουν τα πακέτα script/style για τις δυνατότητες που περιορίζονται από την άδεια (αναζήτηση, σχολιασμός, …) μόνο όταν η άδεια τις ενεργοποιεί, ώστε το UI του widget να παραμένει συνεπές με ό,τι θα κάνει πραγματικά ο διακομιστής.
Χάρτης χαρακτηριστικών και πρόσθετων
Η διεπαφή προϊόντος χρησιμοποιεί το “πρόσθετο” ως ευρύ ετικέτα χαρακτηριστικού, αλλά η καταχώρηση στον διακομιστή διαφέρει:
| Χαρακτηριστικό | Πώς ενεργοποιείται | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Σχόλιο | Ενσωματωμένο στον προβολέα· περιλαμβάνει πόρους σχολιασμού | Annotation | Δημιουργία μέσω προγράμματος περιήγησης, διατήρηση συνεδρίας και εξαγωγές με ενσωματωμένο σχόλιο |
| Αναζήτηση | Ενσωματωμένο σε προβολείς μορφών με δυνατότητα αναζήτησης· περιλαμβάνει πόρους αναζήτησης και ενεργοποιεί εξαγωγή όπου απαιτείται | Search | Φυσικός δείκτης κειμένου, επισημάνσεις και πλοήγηση αποτελεσμάτων |
| Μετατροπέας | Εγκαταστήστε το Doconut.NET6.Converter και καταχωρίστε το ConverterPlugin | Converter | Υπηρεσία μετατροπής C# και προαιρετικό web widget |
| DICOM | Εγκαταστήστε το Doconut.NET6.Dicom και καταχωρίστε το DicomPlugin | Dicom | Προβολή ιατρικών εικόνων για .dcm και .ima |
Τα Σχόλιο και η κανονική Αναζήτηση δεν χρησιμοποιούν το AddPlugin<TPlugin>()· τα πακέτα τους εκδίδονται μόνο όταν η άδεια χορηγεί την αντίστοιχη δυνατότητα. Ο Μετατροπέας και το DICOM είναι οι κυκλοφορημένες επιλογές IDoconutPlugin υλοποιήσεις για αυτό το σύνολο τεκμηρίωσης.
Τα εγκεκριμένα αντικείμενα .NET 6 περιέχουν τα Doconut.NET6.Converter και Doconut.NET6.Dicom στην ίδια έκδοση με το βασικό πακέτο.
Κυκλοφορημένα πακέτα πρόσθετων
| Πρόσθετο | Πακέτο | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Μετατροπέας | Doconut.NET6.Converter | Converter | Δυνατότητα μετατροπής εγγράφου |
| DICOM | Doconut.NET6.Dicom | Dicom | Προβολή ιατρικών εικόνων (.dcm — μορφή μόνο-πρόσθετου) |
Κάθε ένα έχει μια αφιερωμένη σελίδα κάτω από Πρόσθετα με τη διαμόρφωση και τη χρήση του.
Προσαρμοσμένοι προβολείς — ο δικός σας διαχειριστής μορφής
Μπορείτε να ενσωματώσετε έναν προβολέα στη γραμμή επεξεργασίας χωρίς να γράψετε πακέτο πρόσθετου, απευθείας από το Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // υλοποιεί IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // προαιρετική προεπιλεγμένη ρύθμιση
});Οι προσαρμοσμένοι προβολείς έχουν προτεραιότητα πάνω από τα πάντα — τόσο ενσωματωμένα όσο και πρόσθετα — και δεν περιορίζονται από άδεια (είναι ο κώδικάς σας). Η εργοστασιακή μονάδα επιστρέφει σε ένα ImageConfig όταν δεν παρέχετε προεπιλεγμένη διαμόρφωση.
Συμπεράσματα
- Τα πρόσθετα καταχωρούνται ρητά και το
LicenseCapabilityτους επικυρώνεται κατά τη διάρκεια τουAddDoconut()— η έλλειψη ή ανεπαρκής μη-προσωρινή δικαιώματα αποτυγχάνουν γρήγορα. - Τα πρόσθετα τύπου αντικατάστασης υποβαθμίζονται ομαλά· οι μορφές μόνο-πρόσθετου αποτυγχάνουν με ένα
LicenseException. - Μια ενεργή προσωρινή άδεια ξεκλειδώνει τα πάντα· η παραγωγική ξεκλειδώνει ό,τι αγοράσατε. Επαληθεύστε με το
IDoconutLicenseServiceπριν την αποστολή.
Ήταν αυτή η σελίδα χρήσιμη;