Σύστημα Πρόσθετων
Επεκτείνετε τον προβολέα με πρόσθετα
Ο πυρήνας του Doconut παραμένει ελαφρύς· η προαιρετική λειτουργικότητα παρέχεται ως plugins — ξεχωριστά πακέτα NuGet που συνεισφέρουν προβολείς ή υπηρεσίες και ενεργοποιούνται από την άδειά σας. Αυτή η σελίδα εξηγεί το μοντέλο καταχώρησης, πώς λειτουργεί ο περιορισμός άδειας σε χρόνο εκτέλεσης, και πώς να ενσωματώσετε τον δικό σας προβολέα.
Καταχώρηση πρόσθετου
Κάθε πακέτο πρόσθετου εκθέτει μία κλάση πρόσθετου. Την καταχωρείτε μία φορά, κατά την εκκίνηση:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() δημιουργεί ένα στιγμιότυπο του πρόσθετου και καλεί την callback Register στο μητρώο πρόσθετων που διατηρείται στο 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, …) μόνο όταν η άδεια τις ενεργοποιεί, ώστε η διεπαφή του widget να παραμένει συνεπής με ό,τι θα κάνει πραγματικά ο διακομιστής.
Χάρτης χαρακτηριστικών και πρόσθετων
| Χαρακτηριστικό | Πώς ενεργοποιείται | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Annotation | Ενσωματωμένο στον προβολέα· περιλαμβάνει πόρους annotation | Annotation | Δημιουργία μέσω περιηγητή, διατήρηση συνεδρίας και εξαγωγές με ενσωματωμένο υδατογράφημα |
| Search | Ενσωματωμένο σε προβολείς αναζητήσιμων μορφών· περιλαμβάνει πόρους αναζήτησης και ενεργοποιεί εξαγωγή όπου απαιτείται | Search | Φυσικός δείκτης κειμένου, επισημάνσεις και πλοήγηση αποτελεσμάτων |
| Converter | Εγκαταστήστε το Doconut.NET6.Converter και καταχωρήστε το ConverterPlugin | Converter | Υπηρεσία μετατροπής C# και προαιρετικό web widget |
| DICOM | Εγκαταστήστε το Doconut.NET6.Dicom και καταχωρήστε το DicomPlugin | Dicom | Προβολή ιατρικών εικόνων για .dcm και .ima |
Η ετικέτα Annotation και η κανονική Search δεν χρησιμοποιούν το AddPlugin<TPlugin>(); τα πακέτα τους εκδίδονται μόνο όταν η άδεια χορηγεί την αντίστοιχη δυνατότητα. Τα Converter και DICOM είναι τα κυκλοφορημένα πρόσθετα IDoconutPlugin για αυτό το σύνολο τεκμηρίωσης.
Τα εγκεκριμένα .NET 6 artifacts περιέχουν Doconut.NET6.Converter και Doconut.NET6.Dicom στην ίδια έκδοση με το βασικό πακέτο.
Κυκλοφορημένα πακέτα πρόσθετων
| Πρόσθετο | Πακέτο | Δυνατότητα | Συνεισφέρει |
|---|---|---|---|
| Converter | Doconut.NET6.Converter | Converter | Δυνατότητα μετατροπής εγγράφων |
| DICOM | Doconut.NET6.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()— η έλλειψη ή η ανεπαρκής μη‑προσωρινή άδεια αποτυγχάνει γρήγορα. - Τα πρόσθετα τύπου Override υποβαθμίζονται ομαλά· οι μορφές μόνο‑πρόσθετου αποτυγχάνουν με
LicenseException. - Μια ενεργή άδεια Temporary ξεκλειδώνει τα πάντα· η παραγωγική άδεια ξεκλειδώνει ό,τι αγοράσατε. Επαληθεύστε με το
IDoconutLicenseServiceπριν τη διανομή.
Ήταν αυτή η σελίδα χρήσιμη;