ระบบปลั๊กอิน

ขยายตัวดูด้วยปลั๊กอิน

แกนหลักของ Doconut ยังคงเบา; ฟังก์ชันเสริมมาพร้อมกับ ปลั๊กอิน — แพ็กเกจ NuGet แยกที่ให้ตัวดูหรือบริการและเปิดใช้งานโดยใบอนุญาตของคุณ. หน้านี้อธิบายโมเดลการลงทะเบียน, วิธีการทำงานของการจำกัดใบอนุญาตในเวลารัน, และวิธีการเชื่อมต่อผู้ดูของคุณเอง.

การลงทะเบียนปลั๊กอิน

แต่ละแพ็กเกจปลั๊กอินจะเปิดเผยคลาสปลั๊กอินหนึ่งคลาส. คุณลงทะเบียนมันครั้งเดียว, ตอนเริ่มต้น:

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

AddPlugin<TPlugin>() สร้างอินสแตนซ์ของปลั๊กอินและเรียกคอลแบ็ก Register ของมันต่อทะเบียนปลั๊กอินที่อยู่บน DoconutOptions. ทุกอย่างที่ปลั๊กอินให้จะถูกแท็กด้วย ความสามารถที่จำเป็น ของปลั๊กอิน. AddDoconut() ตรวจสอบปลั๊กอินที่ลงทะเบียนทันที: ใบอนุญาตหาย, ไฟล์ TRIAL รุ่นเก่า, หรือใบอนุญาตแบบชำระเงินที่ไม่มี ความสามารถ จะทำให้การเริ่มต้นล้มเหลวด้วย InvalidOperationException. การลงทะเบียนแบบ Temporary/Demo จะคงอยู่จนกว่าจะหมดอายุ, แต่ ความสามารถ ในเวลารันจะถูกยกเลิกหลังจากวันหมดอายุ.

สัญญา

ปลั๊กอินทำตามอินเทอร์เฟซขนาดเล็กโดยเจตนา:

text
public interface IDoconutPlugin
{
    string Name { get; }                          // e.g. "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // the license gate
    void Register(IDoconutPluginBuilder builder); // contribute viewers/services
}

ภายใน Register ตัวสร้างรับการสนับสนุนสองประเภท:

  • builder.RegisterViewer(".dcm", () => new DicomViewer()) — ตัวดูสำหรับส่วนขยายไฟล์,
  • builder.RegisterService<TContract>(() => …) — บริการแบบพิมพ์ที่ส่วนอื่นของ pipeline สามารถค้นหาได้.

ความสามารถและการจำกัด

ความสามารถคือหน่วยของใบอนุญาต. Converter และ Dicom มาพร้อมกับปลั๊กอินแบบ opt‑in; Search และ Annotation เป็นฟีเจอร์ในตัวที่ถูกจำกัดในลักษณะเดียวกัน. ตัวดูพื้นฐาน ไม่ เป็นความสามารถ — มันเป็นเงื่อนไขเบื้องต้น, เปิดเผยเป็น IsViewerLicensed บนบริการใบอนุญาต.

การตรวจสอบในขั้นตอนเริ่มต้นโดยทั่วไปจะป้องกันปลั๊กอินที่ไม่มีใบอนุญาตไม่ให้เข้าสู่ pipeline ของคำขอ. โรงงานตัวดูยังใช้กฎป้องกันสองข้อในเวลารัน, ซึ่งสำคัญหากสิทธิ์เปลี่ยนหลังจากเริ่มต้น:

  • ปลั๊กอินทับตัวดูในตัว (ปลั๊กอินอ้างสิทธิ์ส่วนขยายที่ registry ในตัวก็จัดการได้): หาก ความสามารถ ได้รับใบอนุญาต, ตัวดูปลั๊กอินจะชนะ; หากไม่มี, Doconut จะกลับไปใช้ตัวดูในตัวโดยอัตโนมัติ. ผู้ใช้ยังคงเห็นเอกสารของตน — แต่พวกเขาจะไม่ได้รับฟีเจอร์จากปลั๊กอิน.
  • รูปแบบที่มีเฉพาะปลั๊กอิน (เช่น .dcm — DICOM ไม่มีตัวดูในตัว): หากไม่มี ความสามารถ การเรียกเปิดจะล้มเหลวอย่างรุนแรง:
text
LicenseException: This document type requires the 'Dicom' plugin license.

ใบอนุญาต Temporary ที่ใช้งานอยู่จะมอบทุกความสามารถ (พร้อมการดูพื้นฐานที่สะอาดและไม่มีลายน้ำ). นี่เป็นแหล่งที่มาของความประหลาดใจเมื่อเปิดใช้งานจริง: การลงทะเบียนปลั๊กอินเดียวกันกับใบอนุญาตที่ซื้อแล้วซึ่งขาดหนึ่งในความสามารถจะทำให้ AddDoconut() ล้มเหลวในขั้นตอนเริ่มต้น. เปรียบเทียบ IsCapabilityGranted(...) กับแผนของคุณก่อนทำการปรับใช้. ด้านตรงข้าม: หาก ไม่มีใบอนุญาตเลย, จะไม่มีความสามารถใด ๆ ถูกมอบ — ใบอนุญาตที่หายไม่ได้ถือเป็น Temporary license.

การจำกัดเดียวกันนี้ปรากฏบนฝั่งไคลเอนต์: Viewer.ReferenceScripts() และ ReferenceCss() ส่งออกชุดสคริปต์/สไตล์สำหรับฟีเจอร์ที่จำกัดโดยใบอนุญาต (search, annotation, …) เฉพาะเมื่อ ใบอนุญาตเปิดใช้งานฟีเจอร์เหล่านั้น, ดังนั้น UI ของวิดเจ็ตจึงสอดคล้องกับสิ่งที่เซิร์ฟเวอร์จะทำจริง.

แผนที่คุณลักษณะและปลั๊กอิน

ผลิตภัณฑ์ UI ใช้ “plugin” เป็นป้ายคุณลักษณะกว้าง, แต่การลงทะเบียนบนเซิร์ฟเวอร์แตกต่างกัน:

คุณลักษณะวิธีการเปิดใช้งานความสามารถสิ่งที่ให้
Annotationฝังอยู่ในตัวดู; รวมทรัพยากร annotationAnnotationการเขียนในเบราว์เซอร์, การคงสภาพเซสชัน, และการส่งออกที่ฝังไว้
Searchฝังอยู่ในตัวดูรูปแบบที่ค้นหาได้; รวมทรัพยากรการค้นหาและเปิดใช้งานการสกัดข้อมูลเมื่อจำเป็นSearchดัชนีข้อความพื้นฐาน, ไฮไลท์, และการนำทางผลลัพธ์
Converterติดตั้ง Doconut.NET8.Converter และลงทะเบียน ConverterPluginConverterบริการแปลง C# และวิดเจ็ตเว็บเสริม (optional)
DICOMติดตั้ง Doconut.NET8.Dicom และลงทะเบียน DicomPluginDicomการดูภาพทางการแพทย์สำหรับ .dcm และ .ima

แพ็กเกจปลั๊กอินที่ปล่อยออกมา

ปลั๊กอินแพ็กเกจความสามารถสิ่งที่ให้
ConverterDoconut.NET8.ConverterConverterความสามารถในการแปลงเอกสาร
DICOMDoconut.NET8.DicomDicomการดูภาพทางการแพทย์ (.dcm — รูปแบบที่มีเฉพาะปลั๊กอิน)

แต่ละรายการมีหน้าเฉพาะภายใต้ Plugins พร้อมการกำหนดค่าและวิธีใช้ของมัน.

ตัวดูแบบกำหนดเอง — ตัวจัดการรูปแบบของคุณ

คุณสามารถเชื่อมต่อผู้ดูเข้ากับ pipeline โดยไม่ต้องเขียนแพ็กเกจปลั๊กอิน, โดยตรงจาก Program.cs:

text
builder.Services.AddDoconut(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),               // implements IFormatViewer
        () => new ImageConfig { ImageResolution = 150 }); // optional default config
});

ตัวดูแบบกำหนดเองมีลำดับความสำคัญเหนือ ทุกอย่าง — ทั้งในตัวและปลั๊กอิน — และไม่ได้ถูกจำกัดโดยใบอนุญาต (เป็นโค้ดของคุณ). โรงงานจะย้อนกลับไปใช้ ImageConfig เมื่อคุณไม่ได้ระบุการกำหนดค่าเริ่มต้น.

สรุป

  • ปลั๊กอินจะถูกลงทะเบียนอย่างชัดเจนและ LicenseCapability ของมันจะถูกตรวจสอบระหว่าง AddDoconut() — การขาดหรือไม่เพียงพอของสิทธิ์ที่ไม่ใช่ Temporary จะทำให้ล้มเหลวอย่างรวดเร็ว.
  • ปลั๊กอินแบบ Override จะลดระดับอย่างราบรื่น; รูปแบบที่มีเฉพาะปลั๊กอินจะล้มเหลวด้วย LicenseException.
  • ใบอนุญาต Temporary ที่ใช้งานอยู่จะปลดล็อกทุกอย่าง; การผลิตจะปลดล็อกตามที่คุณซื้อ. ตรวจสอบกับ IDoconutLicenseService ก่อนส่งมอบ.

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