DoconutExtensions
تسجيل الخدمة والوسطية
DoconutExtensions (namespace Doconut.Middleware) هو الفئة الثابتة التي تحتوي على الثلاث استدعاءات التي يقوم بها كل مضيف Doconut: تسجيل خدمة واحدة واستدعاءين للوسطية.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)يبني DoconutOptions، يتحقق من صحتها بسرعة (انظر DoconutOptions → Startup validation)، ويسجل مخطط الخدمة الكامل:
| الخدمة | مدة الحياة | الدور |
|---|---|---|
DoconutOptions | Singleton | كائن التكوين |
IViewerFactory | Singleton | يربط الامتدادات بعارضات الصيغ |
IDocumentSessionManager | Singleton | الرمز → ذاكرة التخزين المؤقت للجلسة (IMemoryCache مسجل أيضًا) |
IDoconutLicenseService | Singleton | الرخصة تُحمَّل مرة واحدة عند بدء التشغيل (الأولوية: LicenseStream → LicenseContent → LicensePath → البحث التلقائي) |
PageImageService | Singleton | خط أنابيب صورة الصفحة (علامة مائية/تدوير/تحجيم/تعليقات) |
| أمان المستند (متجر الوصول) | Singleton | إعطاء الأذونات لربط الرمز بالجلسة |
Viewer | Transient | الواجهة العامة للفتح/الإغلاق |
DocumentConverter | Transient | واجهة التحويل — تتطلب إضافة Converter |
DistributedDocumentPublisher | — | ينشر مخرجات المستند إلى التخزين المشترك |
فحص الصحة "doconut" | — | يُبلغ عن حالة الرخصة/انتهاء الصلاحية عبر فحوصات الصحة في ASP.NET |
لا يوجد استدعاء مكافئ في مكتبة .NET Standard السابقة. كانت تُنشئ new Viewer(cache, accessor) لكل طلب وتُمرّر الخيارات إلى الوسطية؛ كلاهما استُبدلا بهذا التسجيل الوحيد.
سلوكان يستحقان المعرفة:
- المحول يتطلب الإضافة الخاصة به. استدعاء
DocumentConverterبدونoptions.AddPlugin<ConverterPlugin>()يثير استثناء:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- صلاحية الإضافة يتم التحقق منها عند بدء التشغيل. رخصة مفقودة، ملف
TRIALقديم، أو رخصة مدفوعة بدون قدرة الإضافة المسجلة يؤدي إلى فشل عند وقتAddDoconut(). التسجيلات المؤقتة/التجريبية تبقى صالحة بعد تاريخ انتهاء صلاحيتها، بينما البوابات في وقت التشغيل تُلغي القدرات المنتهية.
فحص الصحة يندمج مع آلية ASP.NET Core القياسية — قم بربطه إذا أردت حالة الرخصة على نقطة صحة التطبيق الخاصة بك:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)يضيف وسطية صورة صفحة Doconut. يرد على كل طلب يحمل معامل الاستعلام ?token= — الصفحات، المصغرات، البحث، التعليقات، إجراءات الصفحة (جدول الطلب الكامل موجود في المفاهيم الأساسية → كيف يعمل العارض). عندما تكون UnsafeMode مساوية لـ false، يتم ربط طبقة أمان المستند تلقائيًا قبلها.
لا يأخذ أي معطيات. تمرير كائن DoconutOptions هنا كان شكل المكتبة السابقة ولم يعد يتجمل.
عينة المرجع توجه طلبات الودجت عبر فرع مسار، مع الحفاظ على شكل الطلب التاريخي:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)يخدم ملفات JS، CSS، الصور، والخطوط المدمجة في DoconutOptions.ResourcesPath (الافتراضي /doconut-res). هذه هي الملفات التي تُصدرها Viewer.ReferenceCss() / ReferenceScripts() كوسوم.
دائمًا استدعِه قبل UseDoconut(). إذا بقيت منطقة العارض فارغة وأظهر وحدة تحكم المتصفح أخطاء 404 لـ /doconut-res/...، فهذا يعني أن هذا الاستدعاء مفقود أو في غير مكانه.
هذا هو البديل المدعوم لتوصيل وسطية الموارد المدمجة يدويًا باستخدام app.UseMiddleware<EmbeddedResourceMiddleware>().
Serving from shared storage
هناك تسجيلان إضافيان للعمليات التي يتم فيها نشر المستند على عقدة لا تكون بالضرورة هي العقدة التي تخدم صفحاته. كلاهما مغطى بالكامل في النشر الموزع؛ التواقيع هي:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...) // shared backing store for widget uploadsجانب القراءة هو وسطية منفصلة من حزمة Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) و WebFarmOptions غير موجودين في هذا الإصدار. راجع دليل الترحيل للحصول على خريطة الإعدادات خطوة بخطوة.
Ordering recap
app.UseRouting();
app.UseSession(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut(); // 2nd Doconut call (or via a MapWhen branch)هل كانت هذه الصفحة مفيدة؟