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
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 — ทำการแมพหากคุณต้องการสถานะใบอนุญาตบน endpoint ตรวจสุขภาพของคุณ:

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() เสมอ. หากพื้นที่ Viewer ว่างเปล่าและคอนโซลของเบราว์เซอร์แสดง 404 สำหรับ /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)

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