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" | ערך תיאום עבור נקודת הקצה page-image. הוא מאומת, אך אינו מרים ענף צינור; שמור אותו תואם למיפוי UseDoconut() האמיתי ולBasePath של הלקוח. |
string | ResourcesPath | "/doconut-res" | קידומת נתיב URL עבור משאבי JS/CSS/תמונה/גופן המוטמעים. |
string | LicensePath | "" | נתיב לקובץ הרישיון. ריק → מקור רישיון הבא, ואז גילוי אוטומטי; אם לא נמצא → מצב הערכה עם סימן מים וללא יכולות. |
string | LicenseContent | "" | תוכן רישיון XML גולמי (מסד נתונים, משתנה סביבה, מנהל סודות). גובר על LicensePath. |
Stream? | LicenseStream | null | רישיון כזרם, נקרא פעם אחת באתחול. גובר על שני המקורות האחרים. |
bool | ResetLicense | false | דגל תאימות שמור. מימוש .NET 6 הנוכחי אינו משתמש בו; יש לאתחל את היישום לאחר החלפת רישיון. |
DoconutPluginRegistry | PluginRegistry | — | רישום קריאה בלבד שאוסף תרומות תוספים; נצרך על ידי מפעל הצופים. מלא באמצעות AddPlugin<T>(). |
קדימות רישיון (מוכלת ברישום השירות): LicenseStream → LicenseContent → LicensePath → גילוי אוטומטי (ראה התחלה → הגדרת רישיון).
שיטות
AddPlugin<TPlugin>()
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()השתמש בשיטה זו עבור חבילות Converter ו‑DICOM שהושקו באופציית opt‑in. אנוטציה ו‑Search רגיל הם תכונות מורשות מובנות ואינן משתמשות ב‑AddPlugin<TPlugin>().
רושמת תוסף ממקור ראשון (Converter, DICOM). Fluent — מחזירה את מופע האפשרויות. AddDoconut() זורק InvalidOperationException עבור רישיון חסר, קובץ TRIAL מיושן, או רישיון בתשלום שאינו מעניק את היכולת לתוסף. רישומים זמניים/דמו נשמרים לאחר פקיעה והופכים לתלויים בשער זמן הריצה (ראה מושגים מרכזיים → מערכת תוספים).
הווידג'ט Converter באופציית opt‑in מופעל באמצעות AddConverterWidget() ומוצג דרך המאפיין הקריאה‑בלבד ConverterWidget; אפשרויותיו מתועדות בעמוד תוסף Converter (תוספים → תוסף Converter).
RegisterViewer(extension, factory, defaultConfig?)
DoconutOptions RegisterViewer(
string extension, // ".myext" — הנקודה המקדימה אופציונלית
Func<IFormatViewer> factory,
Func<BaseConfig>? defaultConfig = null)רושמת צופה מותאם עבור סיומת קובץ. צופים מותאמים גוברים על צופים מובנים ותוספים ואינם מוגבלים ברישיון. כאשר defaultConfig מושמט והמסמך נפתח ללא תצורה מפורשת, משתמשים ב‑ImageConfig.
זורק ArgumentException (Extension must be a non-empty file extension.) עבור סיומת ריקה ו‑ArgumentNullException עבור מפעל ריק.
אימות אתחול
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.תצורות נפוצות
// ייצור: רישיון מפורש, הכל נעול (כל ברירות המחדל של האבטחה)
builder.Services.AddDoconut(options =>
{
options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});
// נתיבים מותאמים (למשל כדי למנוע קונפליקט נתיב)
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.
האם דף זה היה מועיל?