ระบบปลั๊กอิน
ขยายตัวดูเอกสารด้วยปลั๊กอิน
แกนหลักของ Doconut ยังคงเบา; ฟังก์ชันเสริมจะถูกจัดจำหน่ายเป็น plugins — แพ็กเกจ NuGet แยกที่ให้ตัวดูหรือบริการและจะเปิดใช้งานโดยใบอนุญาตของคุณ. หน้านี้อธิบายโมเดลการลงทะเบียน, วิธีการทำงานของการจำกัดใบอนุญาตในเวลารัน, และวิธีการเชื่อมต่อ viewer ของคุณเอง.
การลงทะเบียนปลั๊กอิน
แต่ละแพ็กเกจปลั๊กอินจะเปิดเผยคลาสปลั๊กอินหนึ่งคลาส คุณลงทะเบียนมันเพียงครั้งเดียวเมื่อเริ่มต้น:
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. การลงทะเบียนชั่วคราว/สาธิตจะคงอยู่จนกว่าจะหมดอายุ, แต่ความสามารถในเวลารันจะถูกยกเลิกหลังจากวันหมดอายุ.
สัญญา
ปลั๊กอินจะทำตามอินเทอร์เฟซขนาดเล็กโดยเจตนา:
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 ไม่มีตัวดูในตัว): หากไม่มีความสามารถ การเรียกเปิดจะล้มเหลวอย่างรุนแรง:
LicenseException: This document type requires the 'Dicom' plugin license.ใบอนุญาตชั่วคราวที่ใช้งานอยู่มอบความสามารถทั้งหมด (พร้อมการดูพื้นฐานที่สะอาดและไม่มีลายน้ำ). นี่เป็นแหล่งที่มาของความประหลาดใจเมื่อติดตั้งจริง: การลงทะเบียนปลั๊กอินเดียวกันกับใบอนุญาตที่ซื้อแต่ละความสามารถบางอย่างถูกละเว้นทำให้ AddDoconut() ล้มเหลวในระหว่างการเริ่มต้น. เปรียบเทียบ IsCapabilityGranted(...) กับแผนของคุณก่อนทำการปรับใช้. ด้านตรงข้าม: หาก ไม่มีใบอนุญาตเลย, จะไม่มีอะไรได้รับการมอบหมาย — ใบอนุญาตที่ขาดหายไม่ใช่ใบอนุญาตชั่วคราว.
การจำกัดเดียวกันนี้ปรากฏบนฝั่งไคลเอนต์: Viewer.ReferenceScripts() และ ReferenceCss() ส่งออกชุดสคริปต์/สไตล์สำหรับฟีเจอร์ที่จำกัดด้วยใบอนุญาต (search, annotation, …) เฉพาะเมื่อ ใบอนุญาตเปิดใช้งาน, ดังนั้น UI ของวิดเจ็ตจึงสอดคล้องกับสิ่งที่เซิร์ฟเวอร์จะทำจริง.
แผนที่ฟีเจอร์และปลั๊กอิน
UI ของผลิตภัณฑ์ใช้คำว่า “plugin” เป็นป้ายกำกับฟีเจอร์กว้าง, แต่การลงทะเบียนบนเซิร์ฟเวอร์แตกต่างกัน:
| ฟีเจอร์ | วิธีการเปิดใช้งาน | ความสามารถ | สิ่งที่สนับสนุน |
|---|---|---|---|
| Annotation | รวมอยู่ในตัวดู; รวมทรัพยากร annotation | Annotation | การเขียนในเบราว์เซอร์, การคงสภาพเซสชัน, และการส่งออกที่ฝังไว้ |
| Search | รวมอยู่ในตัวดูรูปแบบที่ค้นหาได้; รวมทรัพยากรค้นหาและเปิดใช้งานการสกัดข้อมูลเมื่อจำเป็น | Search | ดัชนีข้อความพื้นฐาน, ไฮไลท์, และการนำทางผลลัพธ์ |
| Converter | ติดตั้ง Doconut.NET8.Converter และลงทะเบียน ConverterPlugin | Converter | เซอร์วิสการแปลง C# และวิดเจ็ตเว็บเสริม |
| DICOM | ติดตั้ง Doconut.NET8.Dicom และลงทะเบียน DicomPlugin | Dicom | การดูภาพทางการแพทย์สำหรับ .dcm และ .ima |
Annotation และ Search ปกติไม่ใช้ AddPlugin<TPlugin>(); ชุดของพวกมันจะถูกส่งออกเฉพาะเมื่อใบอนุญาตมอบความสามารถที่สอดคล้องกัน. Converter และ DICOM เป็นการนำเข้าแบบ opt‑in ของการนำไปใช้ IDoconutPlugin.
แพ็กเกจปลั๊กอินที่เผยแพร่
| ปลั๊กอิน | แพ็กเกจ | ความสามารถ | สิ่งที่สนับสนุน |
|---|---|---|---|
| Converter | Doconut.NET8.Converter | Converter | ความสามารถในการแปลงเอกสาร |
| DICOM | Doconut.NET8.Dicom | Dicom | การดูภาพทางการแพทย์ (.dcm — รูปแบบที่มีเฉพาะปลั๊กอิน) |
แต่ละรายการมีหน้าที่อุทิศเฉพาะภายใต้ Plugins พร้อมการกำหนดค่าและวิธีการใช้งาน.
ตัวดูแบบกำหนดเอง — ตัวจัดการรูปแบบของคุณ
คุณสามารถเชื่อมต่อตัวดูเข้ากับ pipeline ได้โดยไม่ต้องเขียนแพ็กเกจปลั๊กอิน, โดยตรงจาก Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // ทำการ implement IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // config เริ่มต้นแบบเลือกได้
});ตัวดูแบบกำหนดเองจะมีลำดับความสำคัญเหนือ everything — ทั้งในตัวและปลั๊กอิน — และไม่ถูกจำกัดด้วยใบอนุญาต (เป็นโค้ดของคุณ). โรงงานจะย้อนกลับไปยัง ImageConfig เมื่อคุณไม่ได้ระบุการกำหนดค่าเริ่มต้น.
สรุปประเด็นสำคัญ
- ปลั๊กอินจะถูกลงทะเบียนอย่างชัดเจนและ
LicenseCapabilityของมันจะถูกตรวจสอบระหว่างAddDoconut()— การขาดหรือสิทธิ์ที่ไม่ใช่ชั่วคราวและไม่เพียงพอจะล้มเหลวอย่างรวดเร็ว. - ปลั๊กอินแบบ Override จะลดระดับอย่างราบรื่น; รูปแบบที่มีเฉพาะปลั๊กอินจะล้มเหลวด้วย
LicenseException. - ใบอนุญาตชั่วคราวที่ใช้งานอยู่จะปลดล็อกทุกอย่าง; การใช้งานในสภาพการผลิตจะปลดล็อกตามที่คุณซื้อ. ตรวจสอบด้วย
IDoconutLicenseServiceก่อนส่งมอบ.
หน้านี้เป็นประโยชน์หรือไม่?