DoconutOptions

הגדרת שירותי Doconut

DoconutOptions (namespace Doconut) הוא אובייקט ההגדרה היחיד לכל ה‑SDK. אתם מגדירים אותו פעם אחת, בתוך AddDoconut(), והוא נרשם כ‑singleton.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath     = "Doconut.Viewer.lic";
    options.UnsafeMode      = false;
    options.ShowDoconutInfo = false;
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

מאפיינים

סוגמאפייןברירת מחדלתיאור
boolShowDoconutInfofalseכאשר true, בקשת middleware ללא אסימון מחזירה באנר גרסה (Doconut <version> is running on <host>) במקום 404. שימושי לבדיקת עישון; השאירו false בייצור.
boolUnsafeModefalseכאשר true, מדלג על בדיקת האבטחה של ASP.NET‑session בבקשות דף. השאירו false בייצור (ראו מושגים מרכזיים → מושבים ואבטחה).
stringMiddlewarePath"/doconut"ערך תיאום לנקודת הקצה של דף‑תמונה. הוא מאומת, אך אינו מרכיב ענף צינור; שמרו אותו תואם למיפוי האמיתי של UseDoconut() ול‑BasePath של הלקוח.
stringResourcesPath"/doconut-res"קידומת נתיב URL עבור משאבי JS/CSS/תמונה/גופן המוטמעים.
stringLicensePath""נתיב לקובץ הרישיון. ריק → מקור הרישיון הבא, ואז גילוי אוטומטי; אם לא נמצא דבר → מצב הערכה עם סימן מים וללא יכולות.
stringLicenseContent""תוכן רישיון XML גולמי (מסד נתונים, משתנה סביבתי, מנהל סודות). גובר על LicensePath.
Stream?LicenseStreamnullרישיון כ‑Stream, נקרא פעם אחת באתחול. גובר על שני המקורות האחרים.
boolResetLicensefalseדגל תאימות שמור. המימוש הנוכחי של .NET 6 אינו משתמש בו; הפעלו מחדש את היישום לאחר החלפת רישיון.
DoconutPluginRegistryPluginRegistryרשומה לקריאה בלבד האוספת תרומות תוספים; נצרכת על ידי מפעל הצופה. מלאו באמצעות AddPlugin<T>().

עדיפות רישיון (מוכלת ברישום השירות): LicenseStreamLicenseContentLicensePath → גילוי אוטומטי (ראה התחלה → הגדרת רישיון).

שיטות

AddPlugin()

text
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()

השתמשו במתודה זו עבור חבילות Converter ו‑DICOM המופעלות באופציה. אנוטציה וחיפוש רגיל הם תכונות מורשות מובנות ואינן משתמשות ב‑AddPlugin<TPlugin>().

רושמת תוסף ראשוני (Converter, DICOM). Fluent — מחזירה את מופע האופציות. AddDoconut() זורק InvalidOperationException במקרה של רישיון חסר, קובץ TRIAL מיושן, או רישיון בתשלום שאינו מעניק את היכולת לתוסף. רישומים זמניים/דמו נשמרים לאחר תפוגה והופכים לתלויים בשער זמן הריצה (ראה מושגים מרכזיים → מערכת תוספים).

הווידג'ט Converter המופעל באופציה מופעל באמצעות AddConverterWidget() ומוצג דרך המאפיין לקריאה בלבד ConverterWidget; אפשרויותיו מתועדות בעמוד תוסף Converter (תוספים → תוסף Converter).

RegisterViewer(extension, factory, defaultConfig?)

text
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 עבור מפעל null.

אימות אתחול

AddDoconut() מאמת את האופציות fail-fast, כך שהגדרה שגויה מתגלה כחריגה ברורה באתחול במקום 404 מבלבל בזמן הבקשה:

text
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.

תצורות נפוצות

csharp
// 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.

האם דף זה היה מועיל?