DoconutExtensions

ثبت سرویس و میدلور

DoconutExtensions (namespace Doconut.Middleware) کلاس استاتیک است که سه فراخوانی را که هر میزبان Doconut انجام می‌دهد شامل می‌شود: یک ثبت سرویس و دو ثبت میدلور.

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

DoconutOptions را می‌سازد، به‌سرعت آن‌ها را اعتبارسنجی می‌کند (به DoconutOptions → اعتبارسنجی زمان راه‌اندازی مراجعه کنید) و گراف کامل سرویس‌ها را ثبت می‌کند:

سرویسدوره‌عمرنقش
DoconutOptionsSingletonشیء پیکربندی
IViewerFactorySingletonپسوندها را به نمایشگرهای فرمت نگاشت می‌کند
IDocumentSessionManagerSingletonتوکن → حافظه‌ساز جلسه (IMemoryCache نیز ثبت شده است)
IDoconutLicenseServiceSingletonمجوز یک بار در زمان راه‌اندازی بارگذاری می‌شود (اولویت: LicenseStreamLicenseContentLicensePath → جستجوی خودکار)
PageImageServiceSingletonخط لوله تصویر صفحه (واترمارک/چرخش/مقیاس/حاشیه‌نویسی‌ها)
Document security (access store)Singletonمجوزها برای اتصال توکن به جلسه
ViewerTransientرابط عمومی باز/بسته
DocumentConverterTransientرابط تبدیل — نیاز به افزونه Converter دارد
Health check "doconut"وضعیت مجوز/انقضا را از طریق بررسی‌های سلامت ASP.NET گزارش می‌دهد

دو رفتار مهم:

  • Converter نیاز به افزونه خود دارد. حل DocumentConverter بدون options.AddPlugin<ConverterPlugin>() باعث پرتاب استثنا می‌شود:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • اعتبار افزونه در زمان راه‌اندازی اعتبارسنجی می‌شود. یک مجوز مفقود، فایل TRIAL قدیمی، یا مجوز پرداخت‌شده بدون قابلیت افزونه ثبت‌شده در زمان AddDoconut() باعث شکست می‌شود. ثبت‌نام‌های موقت/دمو پس از تاریخ انقضا زنده می‌مانند، در حالی که گیت‌های زمان اجرا قابلیت‌های منقضی‌شده را لغو می‌کنند.

بررسی سلامت با مکانیزم استاندارد ASP.NET Core یکپارچه می‌شود — اگر می‌خواهید وضعیت مجوز را در نقطهٔ سلامت خود داشته باشید، آن را نقشه‌گذاری کنید:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

میدلور تصویر صفحه Doconut را اضافه می‌کند. به هر درخواست که پارامتر query ?token= دارد پاسخ می‌دهد — صفحات، تصویرهای کوچک، جستجو، حاشیه‌نویسی‌ها، اقدامات صفحه (جدول کامل درخواست‌ها در Core Concepts → How the Viewer Works موجود است). وقتی UnsafeMode برابر false باشد، لایهٔ امنیت سند به‌صورت خودکار قبل از آن وصل می‌شود.

نمونهٔ مرجع درخواست‌های ویجت را از طریق یک شاخهٔ مسیر هدایت می‌کند:

csharp
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

JS، CSS، تصاویر و فونت‌های توکار را در DoconutOptions.ResourcesPath (پیش‌فرض /doconut-res) سرو می‌کند. این‌ها همان فایل‌هایی هستند که Viewer.ReferenceCss() / ReferenceScripts() برایشان تگ تولید می‌کنند.

همیشه قبل از UseDoconut() فراخوانی کنید. اگر ناحیهٔ نمایشگر خالی بماند و کنسول مرورگر ۴۰۴ برای /doconut-res/... نشان دهد، این فراخوانی گم شده یا در جای اشتباه قرار گرفته است.

Ordering recap

csharp
app.UseRouting();
app.UseSession();          // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut();          // 2nd Doconut call (or via a MapWhen branch)

آیا این صفحه مفید بود؟