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، طلب الوسيط بدون رمز يُعيد لافتة الإصدار (Doconut <version> is running on <host>) بدلاً من 404. مفيد كاختبار سريع؛ اترك false في بيئة الإنتاج. |
bool | UnsafeMode | false | عند true، يتجاوز فحص أمان جلسة ASP.NET في طلبات الصفحات. اترك 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 8 الحالي لا يستخدمها؛ أعد تشغيل التطبيق بعد استبدال الترخيص. |
DoconutPluginRegistry | PluginRegistry | — | سجل للقراءة فقط يجمع مساهمات الإضافات؛ يُستهلك بواسطة مصنع العارض. املأه عبر AddPlugin<T>(). |
أولوية الترخيص (تُفرض عند تسجيل الخدمة): LicenseStream → LicenseContent → LicensePath → الاكتشاف التلقائي (انظر البداية → إعداد الترخيص).
الطرق
AddPlugin<TPlugin>()
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?)
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() يتحقق من الخيارات فشل سريع، بحيث تظهر الأخطاء في التكوين كاستثناء واضح عند بدء التشغيل بدلاً من 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.
هل كانت هذه الصفحة مفيدة؟