DoconutOptions
הגדרת שירותי Doconut
DoconutOptions (namespace Doconut) הוא אובייקט התצורה היחיד לכל ה‑SDK. אתה מגדיר אותו פעם אחת, בתוך AddDoconut(), והוא נרשם כסינגלטון.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.UnsafeMode = false;
options.ShowDoconutInfo = false;
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});מאפיינים
| סוג | מאפיין | ברירת מחדל | תיאור |
|---|---|---|---|
bool | ShowDoconutInfo | false | כאשר true, בקשת middleware ללא טוקן מחזירה באנר גרסה (Doconut <version> is running on <host>) במקום 404. שימושי לבדיקת עישון; השאר false בייצור. |
bool | UnsafeMode | false | כאשר true, מדלג על בדיקת האבטחה של ASP.NET‑session בבקשות דף. השאר false בייצור (ראה מושגים מרכזיים → הפעלות ואבטחה). |
string | MiddlewarePath | "/doconut" | ערך תיאום לנקודת הקצה של דף‑תמונה. הוא מאומת, אך אינו יוצר ענף צינור; שמור אותו תואם למיפוי האמיתי של UseDoconut() ול‑BasePath של הלקוח. |
string | ResourcesPath | "/doconut-res" | קידומת נתיב URL למשאבים המוטמעים של JS/CSS/תמונה/גופן. |
string | LicensePath | "" | נתיב לקובץ הרישיון. ריק → מקור רישיון הבא, ואז גילוי אוטומטי; אם לא נמצא דבר → מצב הערכה עם סימן מים וללא יכולות. |
string | LicenseContent | "" | תוכן רישיון XML גולמי (מאגר נתונים, משתנה סביבתי, מנהל סודות). עדיפות על LicensePath. |
Stream? | LicenseStream | null | רישיון כ‑Stream, נקרא פעם אחת בהפעלה. עדיפות על שני המקורות האחרים. |
bool | ResetLicense | false | דגל תאימות שמור. מימוש .NET 8 הנוכחי אינו משתמש בו; הפעל מחדש את היישום לאחר החלפת רישיון. |
DoconutPluginRegistry | PluginRegistry | — | רישום קריאה בלבד שאוסף תרומות תוספים; נצרך על ידי מפעל הצופה. מלא באמצעות AddPlugin<T>(). |
עדיפות רישיון (מוכפפת ברישום השירות): LicenseStream → LicenseContent → LicensePath → גילוי אוטומטי (ראה התחלה → הגדרת רישיון).
שיטות
AddPlugin()
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()השתמש בשיטה זו עבור חבילות Converter ו‑DICOM המופעלות באופציית opt‑in. אנוטציה וחיפוש רגיל הם תכונות מורשות מובנות ואינן משתמשות ב‑AddPlugin<TPlugin>().
רושמת תוסף של צד ראשון (Converter, DICOM). Fluent — מחזירה את מופע האופציות. AddDoconut() זורק InvalidOperationException במקרה של רישיון חסר, קובץ TRIAL ישן, או רישיון בתשלום שאינו מעניק את היכולת לתוסף. רישומים זמניים/דמו נשמרים לאחר תפוגה והופכים לתלויים בשער זמן הריצה (ראה מושגים מרכזיים → מערכת תוספים).
ווידג׳ט ה‑Converter באופציית opt‑in מופעל באמצעות AddConverterWidget() ומוצג דרך המאפיין הקריאה‑בלבד ConverterWidget; אפשרויותיו מתועדות בעמוד תוספים → תוסף הממיר.
RegisterViewer(extension, factory, defaultConfig?)
DoconutOptions RegisterViewer(
string extension, // ".myext" — leading dot optional
Func<IFormatViewer> factory,
Func<BaseConfig>? defaultConfig = null)רושמת צופה מותאם עבור סיומת קובץ. צופים מותאמים מקבלים עדיפות על פני צופים מובנים ותוספים ואינם כפופים לרישיון. כאשר defaultConfig מושמט וקובץ נפתח ללא תצורה מפורשת, משתמשים ב‑ImageConfig.
זורק ArgumentException (Extension must be a non-empty file extension.) עבור סיומת ריקה ו‑ArgumentNullException עבור מפעל (factory) עם ערך null.
אימות בזמן אתחול
AddDoconut() מאמת את האופציות fail-fast, כך שמצב תצורה שגוי מתגלה כחריגה ברורה בזמן האתחול במקום 404 מבלבל בזמן הבקשה:
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.תצורות נפוצות
// Production: explicit license, everything locked down (all security defaults)
builder.Services.AddDoconut(options =>
{
options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});
// Custom paths (e.g. to avoid a route conflict)
builder.Services.AddDoconut(options =>
{
options.MiddlewarePath = "/docs-engine";
options.ResourcesPath = "/docs-assets";
});כאשר אתה משנה את ResourcesPath, שמור את ResPath של הווידג׳ט של הלקוח מסונכרן (ראה ViewerConfig).
MiddlewarePath אינו ממפה אוטומטי של נתיבי ASP.NET Core. אם Doconut צריך לענות רק תחת קידומת מותאמת, הרכב UseDoconut() על אותו ענף (למשל עם app.Map("/docs-engine", branch => branch.UseDoconut())) והגדר את BasePath של הלקוח לאותו URL.
האם דף זה היה מועיל?