Σύστημα Πρόσθετων

Επεκτείνετε τον προβολέα με πρόσθετα

Ο πυρήνας του Doconut παραμένει ελαφρύς· η προαιρετική λειτουργικότητα παρέχεται ως plugins — ξεχωριστά πακέτα NuGet που συνεισφέρουν προβολείς ή υπηρεσίες και ενεργοποιούνται από την άδειά σας. Αυτή η σελίδα εξηγεί το μοντέλο καταχώρησης, πώς λειτουργεί ο περιορισμός άδειας σε χρόνο εκτέλεσης, και πώς να ενσωματώσετε τον δικό σας προβολέα.

Καταχώρηση πρόσθετου

Κάθε πακέτο πρόσθετου εκθέτει μία κλάση πρόσθετου. Την καταχωρείτε μία φορά, κατά την εκκίνηση:

csharp
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 διατηρείται μετά τη λήξη, αλλά οι δυνατότητες χρόνου εκτέλεσης της ανακαλούνται μετά την ημερομηνία λήξης.

Η σύμβαση

Ένα πρόσθετο υλοποιεί μια σκόπιμα μικρή διεπαφή:

text
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 δεν έχει ενσωματωμένο προβολέα): χωρίς τη δυνατότητα η κλήση ανοίγματος αποτυγχάνει σκληρά:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Μια ενεργή άδεια Temporary χορηγεί κάθε δυνατότητα (με καθαρή, χωρίς υδατογράφημα βασική προβολή). Αυτό είναι μια κλασική πηγή εκπλήξεων κατά την έναρξη: η καταχώρηση των ίδιων πρόσθετων με μια αγορασμένη άδεια που παραλείπει μία από τις δυνατότητές τους κάνει το AddDoconut() να αποτύχει κατά την εκκίνηση. Συγκρίνετε το IsCapabilityGranted(...) με το πλάνο σας πριν την ανάπτυξη. Το αντίστροφο: χωρίς καμία άδεια, δεν χορηγείται τίποτα — μια ελλιπής άδεια δεν είναι άδεια Temporary.

Το ίδιο περιοριστικό σύστημα εμφανίζεται στην πλευρά του πελάτη: οι μέθοδοι Viewer.ReferenceScripts() και ReferenceCss() παράγουν τα πακέτα script/style για τις δυνατότητες που περιορίζονται από άδεια (search, annotation, …) μόνο όταν η άδεια τις ενεργοποιεί, ώστε η διεπαφή του widget να παραμένει συνεπής με ό,τι θα κάνει πραγματικά ο διακομιστής.

Χάρτης χαρακτηριστικών και πρόσθετων

ΧαρακτηριστικόΠώς ενεργοποιείταιΔυνατότηταΣυνεισφέρει
AnnotationΕνσωματωμένο στον προβολέα· περιλαμβάνει πόρους annotationAnnotationΔημιουργία μέσω περιηγητή, διατήρηση συνεδρίας και εξαγωγές με ενσωματωμένο υδατογράφημα
SearchΕνσωματωμένο σε προβολείς αναζητήσιμων μορφών· περιλαμβάνει πόρους αναζήτησης και ενεργοποιεί εξαγωγή όπου απαιτείταιSearchΦυσικός δείκτης κειμένου, επισημάνσεις και πλοήγηση αποτελεσμάτων
ConverterΕγκαταστήστε το Doconut.NET6.Converter και καταχωρήστε το ConverterPluginConverterΥπηρεσία μετατροπής C# και προαιρετικό web widget
DICOMΕγκαταστήστε το Doconut.NET6.Dicom και καταχωρήστε το DicomPluginDicomΠροβολή ιατρικών εικόνων για .dcm και .ima

Η ετικέτα Annotation και η κανονική Search δεν χρησιμοποιούν το AddPlugin<TPlugin>(); τα πακέτα τους εκδίδονται μόνο όταν η άδεια χορηγεί την αντίστοιχη δυνατότητα. Τα Converter και DICOM είναι τα κυκλοφορημένα πρόσθετα IDoconutPlugin για αυτό το σύνολο τεκμηρίωσης.

Τα εγκεκριμένα .NET 6 artifacts περιέχουν Doconut.NET6.Converter και Doconut.NET6.Dicom στην ίδια έκδοση με το βασικό πακέτο.

Κυκλοφορημένα πακέτα πρόσθετων

ΠρόσθετοΠακέτοΔυνατότηταΣυνεισφέρει
ConverterDoconut.NET6.ConverterConverterΔυνατότητα μετατροπής εγγράφων
DICOMDoconut.NET6.DicomDicomΠροβολή ιατρικών εικόνων (.dcm — μορφή μόνο-πρόσθετου)

Κάθε ένα έχει μια αφιερωμένη σελίδα κάτω από Plugins με τη διαμόρφωση και τη χρήση του.

Προσαρμοσμένοι προβολείς — ο δικός σας χειριστής μορφής

Μπορείτε να ενσωματώσετε έναν προβολέα στην αλυσίδα χωρίς να γράψετε πακέτο πρόσθετου, απευθείας από το Program.cs:

text
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 πριν τη διανομή.

Ήταν αυτή η σελίδα χρήσιμη;