DoconutExtensions
การลงทะเบียนบริการและมิดเดิลแวร์
DoconutExtensions (namespace Doconut.Middleware) คือคลาสสแตติกที่มีสามการเรียกใช้ที่โฮสต์ Doconut ทุกตัวทำ: การลงทะเบียนบริการหนึ่งรายการและการลงทะเบียนมิดเดิลแวร์สองรายการ.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // ก่อน UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)สร้าง DoconutOptions, ตรวจสอบความถูกต้องแบบ fail-fast (ดู DoconutOptions → การตรวจสอบ Startup), และลงทะเบียนกราฟบริการทั้งหมด:
| บริการ | อายุการใช้งาน | บทบาท |
|---|---|---|
DoconutOptions | Singleton | อ็อบเจ็กต์การกำหนดค่า |
| Service cache session | Singleton | Token → แคชเซสชัน (IMemoryCache ถูกลงทะเบียนด้วยเช่นกัน) |
IDoconutLicenseService | Singleton | ใบอนุญาตโหลดหนึ่งครั้งที่การเริ่มต้น (ลำดับความสำคัญ: LicenseStream → LicenseContent → LicensePath → auto-search) |
| pipeline ภาพหน้า | Singleton | ทำการประมวลผลภาพสำหรับหน้า (ลายน้ำ, หมุน, ปรับขนาด, คำอธิบายภาพ) |
| ความปลอดภัยเอกสาร (ที่เก็บการเข้าถึง) | Singleton | มอบสิทธิ์สำหรับการผูก token กับเซสชัน |
Viewer | Transient | ฟาซาดสสาธารณะสำหรับเปิด/ปิด |
DocumentConverter | Transient | ฟาซาดสการแปลง — ต้องการปลั๊กอิน Converter |
DistributedDocumentPublisher | — | เผยแพร่ศิลปวัตถุของเอกสารไปยัง shared storage |
Health check "doconut" | — | รายงานสถานะใบอนุญาต/วันหมดอายุผ่านการตรวจสอบสุขภาพของ ASP.NET |
ไม่มีการเรียกที่เทียบเท่าในไลบรารี .NET Standard ก่อนหน้า มันสร้าง new Viewer(cache, accessor) ต่อคำขอและส่งตัวเลือกไปยังมิดเดิลแวร์; ทั้งสองถูกแทนที่ด้วยการลงทะเบียนเดียวนี้.
พฤติกรรมสองอย่างที่ควรรู้:
- Converter requires its plugin. การแก้ไข
DocumentConverterโดยไม่มีoptions.AddPlugin<ConverterPlugin>()จะทำให้เกิดข้อผิดพลาด:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Plugin entitlement is validated at startup. ใบอนุญาตที่หายไป, ไฟล์
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, ชั้นความปลอดภัยของเอกสารถูกเชื่อมต่อโดยอัตโนมัติก่อนมัน.
It takes no arguments. การส่งผ่านอินสแตนซ์ DoconutOptions ที่นี่เป็นรูปแบบของไลบรารีก่อนหน้าและไม่สามารถคอมไพล์ได้อีกต่อไป.
ตัวอย่างอ้างอิงกำหนดเส้นทางคำขอของวิดเจ็ตผ่านสาขาเส้นทาง, รักษารูปแบบคำขอแบบเดิม:
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() สร้างแท็กสำหรับ.
Always call it before UseDoconut(). หากพื้นที่ตัวดูว่างเปล่าและคอนโซลของเบราว์เซอร์แสดง 404 สำหรับ /doconut-res/..., การเรียกนี้หายไปหรืออยู่ในตำแหน่งผิด.
นี่คือการแทนที่ที่สนับสนุนสำหรับการเชื่อมต่อมิดเดิลแวร์การจัดการทรัพยากรฝังด้วยตนเอง.
Serving from shared storage
การลงทะเบียนเพิ่มเติมสองรายการมีสำหรับการปรับใช้ที่โหนดที่เรนเดอร์เอกสารไม่จำเป็นต้องเป็นโหนดที่ให้บริการหน้าของมัน ทั้งสองครอบคลุมตั้งแต่ต้นจนจบใน การปรับใช้แบบกระจาย; ลายเซ็นคือ:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // คิวเผยแพร่พื้นหลังแบบ opt-in
IServiceCollection AddDoconutDistributedWidgets(...) // ที่เก็บข้อมูลสนับสนุนร่วมสำหรับการอัปโหลด widgetด้านการอ่านเป็นมิดเดิลแวร์แยกจากแพคเกจ Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) และ WebFarmOptions ไม่อยู่ในเวอร์ชันนี้ ดู คู่มือการย้าย สำหรับการแมปตั้งค่าแบบทีละรายการ.
Ordering recap
app.UseRouting();
app.UseSession(); // จำเป็นเมื่อ UnsafeMode = false
app.UseDoconutResources(); // การเรียก Doconut ครั้งที่ 1
app.UseDoconut(); // การเรียก Doconut ครั้งที่ 2 (หรือผ่านสาขา MapWhen)หน้านี้เป็นประโยชน์หรือไม่?