מערכת תוספים
הרחבת הצופה עם תוספים
הליבה של Doconut נשארת קלה; פונקציונליות אופציונלית נשלחת כתוספים — חבילות NuGet נפרדות שתורמות צופים או שירותים ומופעלות על ידי הרישיון שלך. דף זה מסביר את מודל הרישום, איך הגבלת הרישיון מתנהלת בזמן ריצה, ואיך לחבר צופה משלך.
רישום תוסף
כל חבילת תוסף חושפת מחלקת תוסף אחת. אתה רושם אותה פעם אחת, באתחול:
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 נשמר לאחר תפוגה, אך היכולות שלו בזמן ריצה מבוטלות לאחר תאריך התפוגה.
החוזה
תוסף מממש ממשק קטן בכוונה:
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 אין צופה מובנה): ללא היכולת הקריאה נכשלה בחומרה:
LicenseException: This document type requires the 'Dicom' plugin license.רישיון Temporary פעיל מעניק כל יכולת (עם צפייה בסיסית נקייה, ללא סימן מים). זהו מקור קלאסי להפתעות בזמן השקה: רישום אותם תוספים עם רישיון שנרכש שמוותר על אחת מהיכולות שלהם גורם לAddDoconut() להיכשל באתחול. השווה את IsCapabilityGranted(...) לתוכנית שלך לפני הפריסה. הצד השני: עם אין רישיון כלל, שום דבר אינו ניתנת — רישיון חסר אינו רישיון Temporary.
ההגבלה זהה בצד הלקוח: Viewer.ReferenceScripts() ו-ReferenceCss() מפיקים את חבילות הסקריפט/סגנון לתכונות המוגבלות ברישיון (חיפוש, אנוטציה, …) רק כאשר הרישיון מאפשר אותן, כך שממשק הווידג'ט נשאר עקבי עם מה שהשרת יעשה בפועל.
מפת תכונות ותוספים
UI המוצר משתמש במילה “תוסף” כתווית תכונה רחבה, אך רישום השרת שונה:
| תכונה | איך זה מופעל | יכולת | תורם |
|---|---|---|---|
| אנוטציה | מובנה בצופה; כולל משאבי אנוטציה | Annotation | עריכת דפדפן, שמירת מושב, וייצוא מוטבע |
| חיפוש | מובנה בצופי פורמט ניתנים לחיפוש; כולל משאבי חיפוש ומאפשר חילוץ כשנדרש | Search | אינדקס טקסט מקורי, הדגשות, וניווט בתוצאות |
| ממיר | התקן Doconut.NET6.Converter ורשום ConverterPlugin | Converter | שירות המרה ב‑C# ווידג'ט אינטרנטי אופציונלי |
| DICOM | התקן Doconut.NET6.Dicom ורשום DicomPlugin | Dicom | צפייה בתמונות רפואיות עבור .dcm ו‑.ima |
אנוטציה וחיפוש רגיל אינם משתמשים בAddPlugin<TPlugin>(); החבילות שלהם נשלחות רק כאשר הרישיון מעניק את היכולת המתאימה. ממיר ו‑DICOM הם המימושים האופציונליים המופצים של IDoconutPlugin עבור סט התיעוד הזה.
הארטיפקטים המאושרים של .NET 6 מכילים Doconut.NET6.Converter ו‑Doconut.NET6.Dicom באותה גרסה כמו חבילת הליבה.
חבילות תוספים משוחררות
| תוסף | חבילה | יכולת | תורם |
|---|---|---|---|
| ממיר | Doconut.NET6.Converter | Converter | יכולת המרת מסמכים |
| DICOM | Doconut.NET6.Dicom | Dicom | צפייה בתמונות רפואיות (.dcm — פורמט רק-תוסף) |
לכל אחד יש דף ייעודי תחת תוספים עם ההגדרות והשימוש.
צופים מותאמים — מטפל פורמט משלך
אתה יכול לחבר צופה לצינור ללא כתיבת חבילת תוסף, ישירות מProgram.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // מיישם IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // תצורה ברירת מחדל אופציונלית
});צופים מותאמים מקבלים עדיפות על הכל — מובנים ותוספים כאחד — ואינם מוגבלים ברישיון (הם הקוד שלך). המפעל חוזר לImageConfig כאשר אינך מספק תצורה ברירת מחדל.
מסקנות
- תוספים נרשמים במפורש וה
LicenseCapabilityשלהם מאומתים במהלךAddDoconut()— חוסר או זכאות לא זמנית בלתי מספקת נכשלת במהירות. - תוספי סגנון‑החלפה מתדרדרים בעדינות; פורמטים רק‑תוסף נכשלים עם
LicenseException. - רישיון Temporary פעיל פותח את כל האפשרויות; סביבת ייצור פותחת רק את מה שרכשת. אמת עם
IDoconutLicenseServiceלפני השחרור.
האם דף זה היה מועיל?