خيارات Doconut

تكوين خدمات Doconut

DoconutOptions (المساحة الاسمية Doconut) هي كائن التكوين الوحيد لكامل SDK. تقوم بتكوينه مرة واحدة داخل AddDoconut()، ويتم تسجيله ككائن مفرد.

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

الخصائص

النوعالخاصيةالقيمة الافتراضيةالوصف
boolShowDoconutInfofalseعند true، يُعيد طلب الوسيط بدون رمز مميز شريط نسخة (Doconut <version> is running on <host>) بدلاً من 404. مفيد كفحص سريع؛ اتركه false في بيئة الإنتاج.
boolUnsafeModefalseعند true، يتخطى فحص أمان جلسة ASP.NET في طلبات الصفحات. اتركه false في بيئة الإنتاج (انظر المفاهيم الأساسية → الجلسات والأمان).
stringMiddlewarePath"/doconut"قيمة التنسيق لنقطة النهاية page-image. يتم التحقق منها، لكنها لا تُنشئ فرعًا في خط الأنابيب؛ حافظ على توافقها مع تعيين UseDoconut() الفعلي ومسار العميل BasePath.
stringResourcesPath"/doconut-res"بادئة مسار URL للموارد المضمنة من نوع JS/CSS/صورة/خط.
stringLicensePath""مسار ملف الترخيص. فارغ → المصدر التالي للترخيص، ثم الاكتشاف التلقائي؛ إذا لم يُعثر على شيء → حالة تقييم مائية العلامة بدون أي قدرات.
stringLicenseContent""محتوى الترخيص XML الخام (قاعدة بيانات، متغير بيئي، مدير أسرار). له أولوية أعلى من LicensePath.
Stream?LicenseStreamnullالترخيص كدفق، يُقرأ مرة واحدة عند بدء التشغيل. له أولوية أعلى من كلا المصدرين الآخرين.
boolResetLicensefalseعلامة توافق محجوزة. تنفيذ .NET 8 الحالي لا يستخدمها؛ أعد تشغيل التطبيق بعد استبدال الترخيص.
DoconutPluginRegistryPluginRegistryسجل للقراءة فقط يجمع مساهمات الإضافات؛ يُستهلك بواسطة مصنع العارض. يُملأ عبر AddPlugin<T>().

أولوية الترخيص (تُفرض عند تسجيل الخدمة): LicenseStreamLicenseContentLicensePath → الاكتشاف التلقائي (انظر بدء الاستخدام → إعداد الترخيص).

الطرق

AddPlugin()()

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

استخدم هذه الطريقة للحزم المصدرة من Converter و DICOM التي تتطلب اختيارًا. التعليقات والبحث العادي هما ميزتان مدمجتان بترخيص ولا تستخدمان AddPlugin<TPlugin>().

يسجل إضافة أولية (Converter، DICOM). طريقة سلسة — تُعيد كائن الخيارات. 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() يتحقق من الخيارات بسرعة الفشل، لذا تظهر الأخطاء في التكوين كاستثناء واضح عند بدء التشغيل بدلاً من 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.

هل كانت هذه الصفحة مفيدة؟