نظام الإضافات
تمديد العارض باستخدام الإضافات
نواة Doconut تبقى خفيفة؛ الوظائف الاختيارية تُرسل كـ الإضافات — حزم NuGet منفصلة تُضيف عارضات أو خدمات وتُفعَّل بترخيصك. تشرح هذه الصفحة نموذج التسجيل، وكيف يتصرف تقييد الترخيص أثناء التشغيل، وكيفية توصيل عارضك الخاص.
تسجيل إضافة
كل حزمة إضافة تُظهر فئة إضافة واحدة. تقوم بتسجيلها مرة واحدة، عند بدء التشغيل:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() ينشئ مثيل الإضافة ويستدعي رد النداء Register الخاص به ضد سجل الإضافات الموجود على DoconutOptions. كل ما تُضيفه الإضافة يُوسم بـ القدرة المطلوبة الخاص بالإضافة. AddDoconut() يتحقق من الإضافات المسجلة فورًا: ترخيص مفقود، ملف TRIAL قديم، أو ترخيص مدفوع بدون القدرة يؤدي إلى فشل بدء التشغيل مع InvalidOperationException. يُحتفظ بتسجيل مؤقت/تجريبي عبر الانتهاء، لكن قدراته أثناء التشغيل تُسحب بعد تاريخ الانتهاء.
العقد
إضافة تُنفّذ واجهة صغيرة عمدًا:
public interface IDoconutPlugin
{
string Name { get; } // مثلاً "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // بوابة الترخيص
void Register(IDoconutPluginBuilder builder); // المساهمة في المشاهد/الخدمات
}داخل Register، يقبل المُنشئ نوعين من المساهمات:
builder.RegisterViewer(".dcm", () => new DicomViewer())— عارض لامتداد ملف،builder.RegisterService<TContract>(() => …)— خدمة مكتوبة يمكن لأجزاء أخرى من خط الأنابيب البحث عنها.
القدرات والتقييد
القدرات هي وحدات الترخيص. Converter و Dicom تُرسل كإضافات اختيارية؛ Search و Annotation هي ميزات مدمجة تُقيد بنفس الطريقة. العارض الأساسي ليس قدرة — إنه المتطلب المسبق، يُظهر كـ IsViewerLicensed على خدمة الترخيص.
عادةً ما يمنع التحقق من بدء التشغيل إضافة غير مرخصة من دخول خط الأنابيب. كما يطبق مصنع العارضين قاعدتين دفاعيتين أثناء التشغيل، وهما مهمتان إذا تغيرت الاستحقاقات بعد بدء التشغيل:
- الإضافة تستبدل عارضًا مدمجًا (إضافة تدعي امتدادًا يتعامل معه السجل المدمج أيضًا): إذا كانت القدرة مرخصة، يفوز عارض الإضافة؛ بدونها، Doconut يعود بصمت إلى العارض المدمج. لا يزال المستخدمون يرون مستنداتهم — لكنهم لا يحصلون على ميزة الإضافة.
- صيغة خاصة بالإضافة (مثال:
.dcm— DICOM لا يمتلك عارضًا مدمجًا): بدون القدرة يفشل استدعاء الفتح بشدة:
LicenseException: This document type requires the 'Dicom' plugin license.ترخيص مؤقت نشط يمنح كل القدرة (مع عرض أساسي نظيف غير مائي). هذا مصدر كلاسيكي للمفاجآت عند الإطلاق: تسجيل نفس الإضافات بترخيص مُشتَرٍ لا يتضمن إحدى قدراتها يجعل AddDoconut() يفشل أثناء بدء التشغيل. قارن IsCapabilityGranted(...) بخطتك قبل النشر. الجانب الآخر: بدون أي ترخيص، لا شيء يُمنح — الترخيص المفقود ليس ترخيص مؤقت.
نفس التقييد يظهر على جانب العميل: Viewer.ReferenceScripts() و ReferenceCss() تُصدر حزم السكريبت/الستايل للميزات المقيدة بالترخيص (البحث، التعليقات، …) فقط عندما يتيح الترخيص ذلك، بحيث يظل واجهة الودجت متسقة مع ما سيقوم به الخادم فعليًا.
خريطة الميزات والإضافات
| الميزة | كيف يتم تمكينها | القدرة | المساهمة |
|---|---|---|---|
| التعليقات | مدمج في العارض؛ يتضمن موارد التعليقات | Annotation | إنشاء المتصفح، حفظ الجلسة، وتصدير مدمج |
| البحث | مدمج في عارضات الصيغ القابلة للبحث؛ يتضمن موارد البحث ويفعل الاستخراج حيث يلزم | Search | فهرس نصي أصلي، تمييز، وتنقل في النتائج |
| المحول | ثبت Doconut.NET8.Converter وسجّل ConverterPlugin | Converter | خدمة تحويل C# وودجت ويب اختياري |
| DICOM | ثبت Doconut.NET8.Dicom وسجّل DicomPlugin | Dicom | عرض الصور الطبية لـ .dcm و .ima |
التعليقات والبحث العادي لا يستخدمان AddPlugin<TPlugin>()؛ تُصدر حزمهم فقط عندما يمنح الترخيص القدرة المقابلة. المحول و DICOM هما تطبيقات IDoconutPlugin اختيارية.
حزم الإضافات المُصدرة
| الإضافة | الحزمة | القدرة | المساهمة |
|---|---|---|---|
| المحول | Doconut.NET8.Converter | Converter | قدرة تحويل المستندات |
| DICOM | Doconut.NET8.Dicom | Dicom | عرض الصور الطبية (.dcm — صيغة خاصة بالإضافة) |
كل منها لديه صفحة مخصصة تحت الإضافات مع تكوينه واستخدامه.
عارضات مخصصة — معالج الصيغة الخاص بك
يمكنك توصيل عارض إلى خط الأنابيب دون كتابة حزمة إضافة، مباشرة من Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // تنفيذ IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // تكوين افتراضي اختياري
});تأخذ العارضات المخصصة أولوية على كل شيء — المدمجات والإضافات على حد سواء — ولا تُقيد بالترخيص (إنها شفرتك). تعود المصنع إلى ImageConfig عندما لا تزود تكوينًا افتراضيًا.
الخلاصات
- الإضافات تُسجل صراحةً وتُتحقق من
LicenseCapabilityالخاصة بها أثناءAddDoconut()— الفقدان أو عدم كفاية الاستحقاق غير المؤقت يفشل بسرعة. - الإضافات بنمط التجاوز تتدهور بلطف؛ الصيغ الخاصة بالإضافة تفشل مع
LicenseException. - ترخيص مؤقت نشط يفتح كل شيء؛ الإنتاج يفتح ما اشتريت. تحقق مع
IDoconutLicenseServiceقبل الإرسال.
هل كانت هذه الصفحة مفيدة؟