מערכת תוספים
הרחבת הצופה עם תוספים
הליבה של Doconut נשארת רזה; פונקציונליות אופציונלית נשלחת כ‑plugins — חבילות NuGet נפרדות שתורמות צופים או שירותים ומופעלות על‑ידי הרישיון שלך. דף זה מסביר את מודל הרישום, איך הגבלת הרישיון מתנהלת בזמן ריצה, וכיצד לחבר צופה משלך.
מודל זה חדש בגרסה זו. ספריית .NET Standard הקודמת לא הייתה כוללת רישום תוספים: ההמרה הייתה חלק מהצופה עצמו והרישיונות לתוספים הותקנו באמצעות קריאות סטטיות של Viewer.SetLicensePlugin(...). אף אחת מהן אינה מנגנון רישום כאן.
רישום תוסף
כל חבילת תוסף חושפת מחלקת תוסף אחת. אתה רושם אותה פעם אחת, באתחול:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() יוצר מופע של התוסף וקורא את ה‑callback Register שלו כנגד רישום התוספים שנמצא ב‑DoconutOptions. כל מה שתוסף תורם מתוייג עם required capability של התוסף. AddDoconut() מאמת תוספים רשומים מיידית: רישיון חסר, קובץ legacy של TRIAL, או רישיון בתשלום ללא היכולת גורמים לכשל באתחול עם InvalidOperationException. רישום Temporary/Demo נשמר לאחר תפוגה, אך היכולות שלו בזמן ריצה מבוטלות לאחר תאריך התפוגה.
החוזה
תוסף מממש ממשק קטן במכוון:
public interface IDoconutPlugin
{
string Name { get; } // למשל "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // שער הרישיון
void Register(IDoconutPluginBuilder builder); // תרום צופים/שירותים
}בתוך Register, הבונה מקבל שני סוגים של תרומות:
builder.RegisterViewer(extension, factory)— צופה עבור סיומת קובץ; הפקטורייה מחזירהIFormatViewer(תוסף DICOM רושם.dcmו‑.imaבדרך זו),builder.RegisterService<TContract>(() => …)— שירות Typed שהחלקים האחרים של הצינור יכולים לחפש.
יכולות והגבלה
יכולות הן יחידות הרישיון. Converter ו‑Dicom נשלחים כתוספים אופציונליים; Search ו‑Annotation הן תכונות מובנות המוגבלות באותו האופן. הצופה הבסיסי אינו יכולת — הוא דרישה מוקדמת, מוצג כ‑IsViewerLicensed בשירות הרישיון.
אימות אתחול בדרך כלל מונע מתוסף ללא רישיון להיכנס לצינור הבקשות. פקטוריית הצופה גם מיישמת שני כללים רציונליים בזמן ריצה, החשובים אם הזכאות משתנה אחרי האתחול:
- תוסף מחליף צופה מובנה (תוסף תובע סיומת שהרישום המובנה גם מטפל בה): כאשר היכולת מורשית, צופה התוסף מנצח; בלי זאת, Doconut חוזר בשקט לצופה המובנה. המשתמשים עדיין רואים את המסמך — הם רק לא מקבלים את תכונת התוסף.
- פורמט ייחודי לתוסף (למשל
.dcm— ל‑DICOM אין צופה מובנה): ללא היכולת קריאת הפתיחה נכשלת בחומרה:
LicenseException: This document type requires the 'Dicom' plugin license.רישיון Temporary פעיל מעניק כל יכולת (עם צפייה בסיסית נקייה, ללא סימן מים). זהו מקור קלאסי להפתעות בזמן השקה: רישום אותם תוספים עם רישיון שנרכש ומשמיט אחת מהיכולות שלהם גורם ל‑AddDoconut() להיכשל באתחול. השווה IsCapabilityGranted(...) לתוכנית שלך לפני הפריסה. הצד השני: עם אין רישיון כלל, שום דבר אינו ניתנת — רישיון חסר אינו רישיון Temporary.
הגבלה זהה מופיעה בצד הלקוח: Viewer.ReferenceScripts() ו‑ReferenceCss() מפיקים את חבילות הסקריפט/סגנון לתכונות המוגבלות ברישיון (חיפוש, הערה, …) רק כאשר הרישיון מאפשר אותן, כך שממשק ה‑widget נשאר תואם למה שהשרת בפועל יעשה.
מפת תכונות ותוספים
| תכונה | איך זה מופעל | יכולת | תורם |
|---|---|---|---|
| Annotation | משולב בצופה; כולל משאבי הערה | Annotation | עריכת דפדפן, שמירת מושב, וייצוא עם חיבור ההערה |
| Search | משולב בצופי פורמטים הניתנים לחיפוש; כולל משאבי חיפוש ומאפשר חילוץ כשנדרש | Search | אינדקס טקסט מקורי, הדגשות, וניווט בתוצאות |
| Converter | Install Doconut.NETStandard.Converter and register ConverterPlugin | Converter | שירות המרת C# ווידג׳ט אינטרנטי אופציונלי |
| DICOM | Install Doconut.NETStandard.Dicom and register DicomPlugin | Dicom | צפייה בתמונות רפואיות עבור .dcm ו‑.ima |
הערה וחיפוש רגילים אינם משתמשים ב‑AddPlugin<TPlugin>(); החבילות שלהם נשלחות רק כאשר הרישיון מעניק את היכולת המתאימה. ממיר ו‑DICOM הם ה‑IDoconutPlugin האופציונליים שהושקו עבור ערכת תיעוד זו.
הארטיפקטים המאושרים של .NET Standard מכילים Doconut.NETStandard.Converter ו‑Doconut.NETStandard.Dicom באותה גרסה כמו חבילת הליבה.
חבילות תוסף משוחררות
| תוסף | חבילה | יכולת | תורם |
|---|---|---|---|
| Converter | Doconut.NETStandard.Converter | Converter | Document conversion capability |
| DICOM | Doconut.NETStandard.Dicom | Dicom | Medical‑image viewing (.dcm — plugin‑only format) |
לכל אחד יש דף ייעודי תחת Plugins עם ההגדרות והשימוש שלו.
צופים מותאמים — מטפל בפורמט שלך
אתה יכול לחבר צופה לצינור ללא כתיבת חבילת תוסף, ישירות מ‑Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // מיישם IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // קונפיגורציה ברירת מחדל אופציונלית
});צופים מותאמים מקבלים עדיפות על everything — מובנים ותוספים כאחד — ואינם מוגבלים ברישיון (הם הקוד שלך). הפקטורייה חוזרת ל‑ImageConfig כאשר אינך מספק תצורת ברירת מחדל.
מסקנות
- תוספים נרשמים במפורש וה‑
LicenseCapabilityשלהם מאומת במהלך ה‑AddDoconut()— רישיון חסר או בלתי מספיק שאינו זמני גורם לכשל מהיר. - תוספים בסגנון Override מתנהגים בעדינות; פורמטים ייחודיים לתוסף נכשלות עם
LicenseException. - רישיון Temporary פעיל פותח את כל האפשרויות; רישיון ייצור פותח רק את מה שנרכש. אמת עם
IDoconutLicenseServiceלפני השחרור.
האם דף זה היה מועיל?