מערכת תוספים

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

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

רישום תוסף

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

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// תוסף רשום שחסר לו רישיון נזרק כאן, ב‑Application_Start, וה‑
// האתר לאחר מכן משיב לכל בקשה עם 500 ריק. הסיבה נמצאת ביומן האירועים של Windows.

AddPlugin<TPlugin>() יוצר את התוסף ומאפשר לו לרשום את התרומות שלו עם DoconutOptions. כל מה שהתוסף תורם מתוייג עם היכולת הנדרשת של התוסף, ו‑DoconutHost.Initialize בודק כל תוסף רשום מול הרישיון לפני שהאתר מגיש את הבקשה הראשונה שלו.

רישיון תוסף חסר עוצר את האתר

כאשר אין רישיון פעיל שמעניק את היכולת של תוסף רשום — אין רישיון כלל, קובץ TRIAL מיושן, או רישיון בתשלום ללא היכולת הזו — DoconutHost.Initialize זורק InvalidOperationException מ‑Application_Start:

text
The Converter plugin is registered via AddPlugin but no active license grants Converter.
Remove the AddPlugin<...>() call or install a license (or trial/demo) that includes Converter.

ב‑System.Web, חריגה ב‑Application_Start אינה מייצרת דף שגיאה. כל בקשה מחזירה 500 ריק, יומן ה‑IIS אינו מציג דבר מועיל, וההודעה מופיעה רק ביומן האירועים של Windows (יומן יישומים, מקור ASP.NET). כאשר אתר מפסיק להגיב מיד אחרי שהתווספה שורת AddPlugin, בדוק תחילה את קבצי הרישיון ב‑wwwroot — ראה הגדרת רישיון.

החוזה

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

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>(() => …) — שירות Typed שהחלקים האחרים של הצינור יכולים לאתר.

יכולות והגבלה

יכולות הן יחידות הרישיון. Converter ו‑Dicom נשלחים כתוספים שניתן לבחור בהם; Search ו‑Annotation הם תכונות מובנות המוגבלות באותו האופן. הצופה הבסיסי אינו יכולת — הוא דרישה מוקדמת, מוצג כ‑IsViewerLicensed בשירות הרישיון.

אימות האתחול בדרך כלל משאיר תוסף ללא רישיון מחוץ לצינור הבקשות. מפעל הצופים גם מיישם שני כללים מגנים, החשובים אם הזכויות משתנות בזמן שהאתר פועל:

  • תוסף שמחליף צופה מובנה (הוא תובע סיומת שגם צופה מובנה מטפל בה): כאשר היכולת מורשית, צופה התוסף מנצח; ללא זאת, Doconut חוזר לצופה המובנה. המשתמשים עדיין רואים את המסמך שלהם; הם רק אינם מקבלים את ההתנהגות של התוסף.
  • פורמט רק‑תוסף (.dcm ו‑.ima — ל‑DICOM אין צופה מובנה): ללא היכולת, הפתיחה נכשלת:
text
LicenseException: This document type requires the 'Dicom' plugin license.

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

הגבלה זהה מגיעה לדפדפן: Viewer.ReferenceScripts() ו‑ReferenceCss() משדרים את הקבצים לתכונות המוגבלות ברישיון (Search, Annotation) רק כאשר הרישיון מעניק אותן, ולכן הדף לעולם אינו מציע תכונה שהשרת יסרב לה.

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

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

הערה וחיפוש אינם משתמשים ב‑AddPlugin<TPlugin>(). לממיר ול‑DICOM יש כל אחד דף תחת תוספים עם התצורה והשימוש שלהם. בחבילה זו, DICOM מציג דפים, מסגרות והנפשות, אך אינו קורא מטא‑נתונים טכניים — ראה תוסף DICOM.

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

אתה יכול לחבר צופה לצינור ללא כתיבת חבילת תוסף, ישירות ב‑Application_Start:

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

צופים מותאמים מקבלים עדיפות על הכל — מובנים ותוספים כאחד — ואינם מוגבלים ברישיון: הם הקוד שלך. כאשר אינך מספק תצורת ברירת מחדל, המפעל משתמש ב‑ImageConfig.

מסקנות

  • תוספים נרשמים במפורש ב‑DoconutHost.Initialize, והיכולות שלהם מאומתות שם; זכות חסרה עוצרת את האתר עם 500 ריק שהסיבה שלו נמצאת ביומן האירועים של Windows.
  • תוספי סגנון Override מתדרדרים בעדינות; פורמטים רק‑תוסף נכשלות עם LicenseException.
  • רישיון Temporary פעיל פותח את כל האפשרויות; בייצור נפתחות רק מה שרכשת. בדוק עם IDoconutLicenseService לפני השחרור.

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