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 ตรวจสอบความถูกต้องแบบ fail-fast (ดู DoconutOptions → การตรวจสอบการเริ่มต้น) และลงทะเบียนกราฟบริการทั้งหมด:

ServiceLifetimeRole
DoconutOptionsSingletonวัตถุการกำหนดค่า
IViewerFactorySingletonแมปส่วนขยายเป็นผู้ดูรูปแบบ
IDocumentSessionManagerSingletonToken → แคชเซสชัน (IMemoryCache ก็ถูกลงทะเบียนเช่นกัน)
IDoconutLicenseServiceSingletonใบอนุญาตโหลดครั้งเดียวที่การเริ่มต้น (ลำดับความสำคัญ: LicenseStreamLicenseContentLicensePath → การค้นหาอัตโนมัติ)
PageImageServiceSingletonไพพ์ไลน์ภาพหน้า (ลายน้ำ/หมุน/สเกล/คำอธิบายภาพ)
Document security (access store)Singletonการให้สิทธิ์สำหรับการผูก token กับเซสชัน
ViewerTransientส่วนหน้าสาธารณะสำหรับเปิด/ปิด
DocumentConverterTransientส่วนหน้าการแปลง — ต้องการปลั๊กอิน Converter
DistributedDocumentPublisherเผยแพร่ศิลปะของเอกสารไปยังที่เก็บข้อมูลร่วม
Health check "doconut"รายงานสถานะใบอนุญาต/วันหมดอายุผ่านการตรวจสุขภาพของ ASP.NET

ไม่มีการเรียกที่เทียบเท่าในไลบรารี .NET Standard ก่อนหน้า มันสร้าง new Viewer(cache, accessor) ต่อคำขอและส่งตัวเลือกไปยังมิดเดิลแวร์; ทั้งสองถูกแทนที่ด้วยการลงทะเบียนเดียวนี้

สองพฤติกรรมที่ควรรู้:

  • Converter requires its plugin. การแก้ไข DocumentConverter โดยไม่ได้เรียก options.AddPlugin<ConverterPlugin>() จะทำให้เกิดข้อผิดพลาด:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • Plugin entitlement is validated at startup. ใบอนุญาตหายไฟล์ TRIAL รุ่นเก่า หรือใบอนุญาตแบบชำระเงินที่ไม่มีความสามารถของปลั๊กอินที่ลงทะเบียน จะล้มเหลวที่เวลาที่เรียก AddDoconut() การลงทะเบียนแบบ Temporary/Demo จะคงอยู่จนกว่าจะถึงวันหมดอายุ ส่วนการตรวจสอบระหว่างรันไทม์จะยกเลิกความสามารถที่หมดอายุ

การตรวจสุขภาพจะรวมกับกลไกมาตรฐานของ ASP.NET Core — ให้แมปหากต้องการสถานะใบอนุญาตบน endpoint สุขภาพของคุณ:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

เพิ่มมิดเดิลแวร์ภาพหน้าของ Doconut มันตอบสนองต่อทุกคำขอที่มีพารามิเตอร์ query ?token= — หน้า, thumbnail, การค้นหา, คำอธิบายภาพ, การกระทำของหน้า (ตารางคำขอเต็มอยู่ใน Core Concepts → How the Viewer Works) เมื่อ UnsafeMode เป็น false ชั้นความปลอดภัยของเอกสารถูกเชื่อมต่อโดยอัตโนมัติก่อนมัน

It takes no arguments. การส่งผ่านอินสแตนซ์ DoconutOptions ที่นี่เป็นรูปแบบของไลบรารีก่อนหน้าและไม่สามารถคอมไพล์ได้อีกต่อไป

ตัวอย่างอ้างอิงกำหนดเส้นทางคำขอของวิดเจ็ตผ่านสาขา path เพื่อรักษารูปแบบคำขอแบบเก่า:

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() สร้างแท็กออกมา

Always call it before UseDoconut(). หากพื้นที่ Viewer ว่างเปล่าและคอนโซลของเบราว์เซอร์แสดง 404 สำหรับ /doconut-res/... แสดงว่าการเรียกนี้หายไปหรือวางตำแหน่งผิด

นี่คือวิธีแทนที่ที่สนับสนุนสำหรับการเชื่อมต่อมิดเดิลแวร์ทรัพยากรฝังด้วยมือโดยใช้ app.UseMiddleware<EmbeddedResourceMiddleware>()

Serving from shared storage

มีการลงทะเบียนเพิ่มเติมสองรายการสำหรับการปรับใช้ที่โหนดที่เรนเดอร์เอกสารไม่จำเป็นต้องเป็นโหนดที่ให้บริการหน้าของมัน ทั้งสองถูกครอบคลุมตั้งแต่ต้นจนจบใน การปรับใช้แบบกระจาย ; ลายเซ็นคือ:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...)        // shared backing store for widget uploads

ด้านการอ่านเป็นมิดเดิลแวร์แยกจากแพคเกจ Doconut.Clouds:

text
IApplicationBuilder UseDoconutCloud<THandler>(
    this IApplicationBuilder app,
    Action<CloudOptions>? configure = null,
    string pathPrefix = "/doconut-cloud")
    where THandler : BaseCloudHandler

UseDoconutWebFarm(...) และ WebFarmOptions ไม่มีในรุ่นนี้ ดูที่ คู่มือการย้าย เพื่อดูการแมปตั้งค่า‑ต่อ​ตั้งค่า

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)

หน้านี้เป็นประโยชน์หรือไม่?