מערכת תוספים

הרחבת המציג עם תוספים

הליבה של Doconut נשארת רזה; פונקציונליות אופציונלית נשלחת כ-plugins — חבילות NuGet נפרדות שתורמות מציגים או שירותים ומופעלות על ידי הרישיון שלך. דף זה מסביר את מודל הרישום, איך תהליך הרישיון מתנהג בזמן ריצה, ואיך לחבר מציג משלך.

רישום תוסף

כל חבילת תוסף חושפת מחלקת תוסף אחת. אתה רושם אותה פעם אחת, בעת האתחול:

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

AddPlugin<TPlugin>() יוצר מופע של התוסף ומפעיל את קריאת האחורית Register שלו כנגד רישום התוספים המוחזק ב-DoconutOptions. כל מה שהתוסף תורם מתויג עם יכולת נדרשת של התוסף. AddDoconut() מאמת תוספים רשומים מיידית: רישיון חסר, קובץ TRIAL מיושן, או רישיון בתשלום ללא היכולת גורמים לכשל באתחול עם InvalidOperationException. רישום Temporary/Demo נשמר לאחר תפוגה, אך היכולות בזמן ריצה שלו מבוטלות לאחר תאריך התפוגה.

החוזה

תוסף מיישם ממשק קטן במכוון:

csharp
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 אין מציג מובנה): ללא היכולת קריאת הפתיחה נכשלת בחומרה:
text
LicenseException: This document type requires the 'Dicom' plugin license.

רישיון Temporary פעיל מעניק כל יכולת (עם צפייה בסיסית נקייה, ללא סימני מים). זהו מקור קלאסי להפתעות בזמן השקה: רישום אותם תוספים עם רישיון שנרכש ושמטת אחת מהיכולות שלו גורם ל-AddDoconut() להיכשל באתחול. השווה את IsCapabilityGranted(...) לתוכנית שלך לפני הפריסה. הצד השני: עם אין רישיון כלל, שום דבר אינו ניתנת — רישיון חסר אינו רישיון Temporary.

הבקרת גישה זהה בצד הלקוח: Viewer.ReferenceScripts() ו-ReferenceCss() מפיקים את חבילות הסקריפט/סגנון לתכונות הנשלטות ברישיון (חיפוש, אנוטציה, …) רק כאשר הרישיון מאפשר אותן, כך שממשק הווידג'ט נשאר תואם למה שהשרת יעשה בפועל.

מפת תכונות ותוספים

ממשק המשתמש של המוצר משתמש במילה “plugin” כתווית תכונה רחבה, אך רישום השרת שונה:

תכונהאיך זה מופעליכולתתורם
הערהמובנה במציג; כולל משאבי אנוטציהAnnotationיצירת תוכן בדפדפן, שמירת מושב, וייצוא מוטבע
חיפושמובנה במציגי פורמטים ניתנים לחיפוש; כולל משאבי חיפוש ומאפשר חילוץ כשנדרשSearchאינדקס טקסט מקורי, הדגשות, וניווט בתוצאות
ממירהתקן Doconut.NET8.Converter ורשום ConverterPluginConverterשירות המרה ב‑C# ווידג'ט אינטרנטי אופציונלי
DICOMהתקן Doconut.NET8.Dicom ורשום DicomPluginDicomצפייה בתמונות רפואיות עבור .dcm ו‑.ima

הערה וחיפוש רגיל אינם משתמשים ב-AddPlugin<TPlugin>(); החבילות שלהם נשלחות רק כאשר הרישיון מעניק את היכולת המתאימה. ממיר ו‑DICOM הם יישומים של IDoconutPlugin אופציונליים.

חבילות תוספים משוחררות

תוסףחבילהיכולתתורם
ממירDoconut.NET8.ConverterConverterיכולת המרת מסמכים
DICOMDoconut.NET8.DicomDicomצפייה בתמונות רפואיות (.dcm — פורמט רק-תוסף)

לכל אחד יש דף ייעודי תחת תוספים עם התצורה והשימוש שלו.

מציגים מותאמים — מטפל בפורמט שלך

אתה יכול לחבר מציג לצינור ללא כתיבת חבילת תוסף, ישירות מ-Program.cs:

csharp
builder.Services.AddDoconut(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),               // מיישם IFormatViewer
        () => new ImageConfig { ImageResolution = 150 }); // תצורה ברירת מחדל אופציונלית
});

מציגים מותאמים מקבלים עדיפות על הכל — מובנים ותוספים כאחד — ואינם נשלטים ברישיון (הם הקוד שלך). המפעל חוזר ל-ImageConfig כאשר אינך מספק תצורת ברירת מחדל.

מסקנות

  • תוספים נרשמים במפורש וה-LicenseCapability שלהם מאומת במהלך AddDoconut() — חסר או זכאות לא-זמנית בלתי מספקת נכשלת במהירות.
  • תוספי סגנון-Override מתדרדרים בעדינות; פורמטים רק-תוסף נכשלים עם LicenseException.
  • רישיון Temporary פעיל פותח את הכל; בייצור נפתחות רק מה שרכשת. אמת עם IDoconutLicenseService לפני השחרור.

האם דף זה היה מועיל?