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

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

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

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

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

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

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

สัญญา

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

csharp
public interface IDoconutPlugin
{
    string Name { get; }                          // เช่น "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // ประตูใบอนุญาต
    void Register(IDoconutPluginBuilder builder); // สนับสนุน viewers/services
}

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

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

ความสามารถและการกำหนดสิทธิ์

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

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

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

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

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

แผนที่ฟีเจอร์และปลั๊กอิน

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

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

คำอธิบายและการค้นหาปกติไม่ใช้ AddPlugin<TPlugin>(); ชุดของพวกเขาจะถูกส่งออกเฉพาะเมื่อใบอนุญาตให้ความสามารถที่สอดคล้อง. ตัวแปลงและ DICOM เป็นการนำไปใช้ IDoconutPlugin แบบ opt-in ที่ปล่อยสำหรับชุดเอกสารนี้.

ศิลปวัตถุ .NET 6 ที่ได้รับการอนุมัติมี Doconut.NET6.Converter และ Doconut.NET6.Dicom ในเวอร์ชันเดียวกับแพ็กเกจแกน.

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

ปลั๊กอินแพ็กเกจความสามารถการสนับสนุน
ตัวแปลงDoconut.NET6.ConverterConverterความสามารถการแปลงเอกสาร
DICOMDoconut.NET6.DicomDicomการดูภาพทางการแพทย์ (.dcm — รูปแบบเฉพาะปลั๊กอิน)

แต่ละรายการมีหน้าที่อุทิศให้ภายใต้ Plugins พร้อมการกำหนดค่าและการใช้งาน.

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

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

csharp
builder.Services.AddDoconut(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),               // ทำการใช้งาน IFormatViewer
        () => new ImageConfig { ImageResolution = 150 }); // ค่ากำหนดเริ่มต้นแบบเลือก
});

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

สรุป

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

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