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 → اعتبارسنجی زمان راهاندازی مراجعه کنید) و گراف کامل سرویسها را ثبت میکند:
| سرویس | دورهعمر | نقش |
|---|---|---|
DoconutOptions | Singleton | شیء پیکربندی |
IViewerFactory | Singleton | پسوندها را به نمایشگرهای فرمت نگاشت میکند |
IDocumentSessionManager | Singleton | توکن → حافظهساز جلسه (IMemoryCache نیز ثبت شده است) |
IDoconutLicenseService | Singleton | مجوز یک بار در زمان راهاندازی بارگذاری میشود (اولویت: LicenseStream → LicenseContent → LicensePath → جستجوی خودکار) |
PageImageService | Singleton | خط لوله تصویر صفحه (واترمارک/چرخش/مقیاس/حاشیهنویسیها) |
| Document security (access store) | Singleton | مجوزها برای اتصال توکن به جلسه |
Viewer | Transient | رابط عمومی باز/بسته |
DocumentConverter | Transient | رابط تبدیل — نیاز به افزونه Converter دارد |
Health check "doconut" | — | وضعیت مجوز/انقضا را از طریق بررسیهای سلامت ASP.NET گزارش میدهد |
دو رفتار مهم:
- Converter نیاز به افزونه خود دارد. حل
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 را اضافه میکند. به هر درخواست که پارامتر query ?token= دارد پاسخ میدهد — صفحات، تصویرهای کوچک، جستجو، حاشیهنویسیها، اقدامات صفحه (جدول کامل درخواستها در Core Concepts → How the Viewer Works موجود است). وقتی UnsafeMode برابر false باشد، لایهٔ امنیت سند بهصورت خودکار قبل از آن وصل میشود.
نمونهٔ مرجع درخواستهای ویجت را از طریق یک شاخهٔ مسیر هدایت میکند:
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() فراخوانی کنید. اگر ناحیهٔ نمایشگر خالی بماند و کنسول مرورگر ۴۰۴ برای /doconut-res/... نشان دهد، این فراخوانی گم شده یا در جای اشتباه قرار گرفته است.
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)آیا این صفحه مفید بود؟