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