מערכת תוספים
הרחבת הצופה עם תוספים
הליבה של Doconut נשארת קלה; פונקציונליות אופציונלית נשלחת כ‑תוספים — חבילות NuGet נפרדות שתורמות צופים או שירותים ומופעלות על‑ידי הרישיון שלך. דף זה מסביר את מודל הרישום, מה קורה בזמן האתחול כאשר רישיון אינו מכסה תוסף, וכיצד לחבר את הצופה שלך.
רישום תוסף
כל חבילת תוסף חושפת מחלקת תוסף אחת. רשם אותה פעם אחת, ב‑Application_Start:
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:
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 — ראה הגדרת רישיון.
החוזה
תוסף מיישם ממשק קטן במכוון:
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 אין צופה מובנה): ללא היכולת, הפתיחה נכשלת:
LicenseException: This document type requires the 'Dicom' plugin license.רישיון Temporary פעיל מעניק כל יכולת. זו הפתעה קלאסית בזמן השקה: אותן שורות AddPlugin שהורצו במהלך ההערכה עוצרות את האתר כאשר הרישיון שנרכש משמיט אחת מהיכולות. השווה IsCapabilityGranted(...) למה שרכשת לפני הפריסה. עם אין רישיון כלל, שום דבר אינו נמסר — רישיון חסר אינו רישיון Temporary.
הגבלה זהה מגיעה לדפדפן: Viewer.ReferenceScripts() ו‑ReferenceCss() משדרים את הקבצים לתכונות המוגבלות ברישיון (Search, Annotation) רק כאשר הרישיון מעניק אותן, ולכן הדף לעולם אינו מציע תכונה שהשרת יסרב לה.
מפת תכונות ותוספים
| תכונה | איך זה מופעל | יכולת | תורם |
|---|---|---|---|
| הערה | מובנה בצופה; כולל את משאבי ההערה | Annotation | יצירת תוכן בדפדפן, שמירת מושב, ייצוא מוטבע |
| חיפוש | מובנה בצופי פורמטים שניתן לחפש בהם; כולל את משאבי החיפוש | Search | אינדקס טקסט מקורי, הדגשות, ניווט בתוצאות |
| ממיר | התקן Doconut.NETFramework.Converter ורשום ConverterPlugin | Converter | שירות המרה ב‑C# ווידג'ט אינטרנטי אופציונלי |
| DICOM | התקן Doconut.NETFramework.Dicom ורשום DicomPlugin | Dicom | צפייה בתמונות רפואיות עבור .dcm ו‑.ima |
הערה וחיפוש אינם משתמשים ב‑AddPlugin<TPlugin>(). לממיר ול‑DICOM יש כל אחד דף תחת תוספים עם התצורה והשימוש שלהם. בחבילה זו, DICOM מציג דפים, מסגרות והנפשות, אך אינו קורא מטא‑נתונים טכניים — ראה תוסף DICOM.
צופים מותאמים — מטפל בפורמט שלך
אתה יכול לחבר צופה לצינור ללא כתיבת חבילת תוסף, ישירות ב‑Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // מיישם IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // קונפיגורציה ברירת מחדל אופציונלית
});צופים מותאמים מקבלים עדיפות על הכל — מובנים ותוספים כאחד — ואינם מוגבלים ברישיון: הם הקוד שלך. כאשר אינך מספק תצורת ברירת מחדל, המפעל משתמש ב‑ImageConfig.
מסקנות
- תוספים נרשמים במפורש ב‑
DoconutHost.Initialize, והיכולות שלהם מאומתות שם; זכות חסרה עוצרת את האתר עם500ריק שהסיבה שלו נמצאת ביומן האירועים של Windows. - תוספי סגנון Override מתדרדרים בעדינות; פורמטים רק‑תוסף נכשלות עם
LicenseException. - רישיון Temporary פעיל פותח את כל האפשרויות; בייצור נפתחות רק מה שרכשת. בדוק עם
IDoconutLicenseServiceלפני השחרור.
האם דף זה היה מועיל?