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, ตรวจสอบความถูกต้องแบบ fail-fast (ดู DoconutOptions → การตรวจสอบการเริ่มต้น), และลงทะเบียนกราฟบริการทั้งหมด:
| บริการ | อายุการใช้งาน | บทบาท |
|---|---|---|
DoconutOptions | Singleton | อ็อบเจ็กต์การกำหนดค่า |
IViewerFactory | Singleton | แมพส่วนขยายเป็นตัวดูรูปแบบ |
IDocumentSessionManager | Singleton | Token → แคชเซสชัน (IMemoryCache ก็ถูกลงทะเบียนเช่นกัน) |
IDoconutLicenseService | Singleton | ใบอนุญาตโหลดครั้งเดียวที่การเริ่มต้น (ลำดับความสำคัญ: LicenseStream → LicenseContent → LicensePath → การค้นหาอัตโนมัติ) |
PageImageService | Singleton | กระบวนการภาพหน้า (ลายน้ำ/หมุน/ปรับขนาด/คำอธิบายประกอบ) |
| Document security (access store) | Singleton | การให้สิทธิ์สำหรับการผูก token กับ session |
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 — ทำแมปหากคุณต้องการสถานะใบอนุญาตบน endpoint ตรวจสุขภาพของคุณ:
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() เสมอ. หากพื้นที่ Viewer ว่างเปล่าและคอนโซลของเบราว์เซอร์แสดง 404 สำหรับ /doconut-res/..., การเรียกนี้หายไปหรืออยู่ในตำแหน่งผิด.
สรุปลำดับการเรียก
app.UseRouting();
app.UseSession(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut(); // 2nd Doconut call (or via a MapWhen branch)หน้านี้เป็นประโยชน์หรือไม่?