ระบบปลั๊กอิน
ขยายตัวดูด้วยปลั๊กอิน
แกนหลักของ Doconut ยังคงเบา; ฟังก์ชันเสริมจะมาพร้อมกับ plugins — แพ็กเกจ NuGet แยกที่ให้ตัวดูหรือบริการและเปิดใช้งานโดยใบอนุญาตของคุณ. หน้านี้อธิบายโมเดลการลงทะเบียน, วิธีการทำงานของการควบคุมใบอนุญาตในเวลารัน, และวิธีการเชื่อมต่อ viewer ของคุณเอง.
โมเดลนี้เป็นใหม่ในรุ่นนี้. ไลบรารี .NET Standard ก่อนหน้านี้ไม่มีรีจิสทรีของปลั๊กอิน: การแปลงทำงานบนตัวดูเองและใบอนุญาตปลั๊กอินถูกติดตั้งผ่านการเรียก Viewer.SetLicensePlugin(...) แบบสแตติก. ทั้งสองไม่ได้เป็นกลไกการลงทะเบียนที่นี่.
การลงทะเบียนปลั๊กอิน
แต่ละแพ็กเกจปลั๊กอินจะเปิดเผยคลาสปลั๊กอินหนึ่งคลาส. คุณลงทะเบียนมันครั้งเดียว, ตอนเริ่มต้น:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() สร้างอินสแตนซ์ของปลั๊กอินและเรียกคอลแบ็ก Register ของมันต่อรีจิสทรีปลั๊กอินที่เก็บบน DoconutOptions. ทุกอย่างที่ปลั๊กอินให้จะถูกแท็กด้วย ความสามารถที่ต้องการ ของปลั๊กอิน. AddDoconut() ตรวจสอบปลั๊กอินที่ลงทะเบียนทันที: การขาดใบอนุญาต, ไฟล์ legacy TRIAL, หรือใบอนุญาตแบบชำระเงินที่ไม่มีความสามารถจะทำให้การเริ่มต้นล้มเหลวด้วย InvalidOperationException. การลงทะเบียน Temporary/Demo จะคงอยู่จนกว่าจะหมดอายุ, แต่ความสามารถในเวลารันจะถูกยกเลิกหลังจากวันหมดอายุ.
สัญญา
ปลั๊กอินจะทำการนำอินเทอร์เฟซที่มีขนาดเล็กโดยเจตนา:
public interface IDoconutPlugin
{
string Name { get; } // เช่น "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // ประตูใบอนุญาต
void Register(IDoconutPluginBuilder builder); // มีส่วนร่วมผู้ชม/บริการ
}ภายใน Register, ตัวสร้างรับการสนับสนุนสองประเภท:
builder.RegisterViewer(".dcm", () => new DicomViewer())— ตัวดูสำหรับส่วนขยายไฟล์,builder.RegisterService<TContract>(() => …)— บริการแบบพิมพ์ที่ส่วนอื่นของ pipeline สามารถค้นหาได้.
ความสามารถและการควบคุม
ความสามารถคือหน่วยของใบอนุญาต. Converter และ Dicom มาพร้อมกับปลั๊กอินแบบ opt‑in; Search และ Annotation เป็นฟีเจอร์ในตัวที่ถูกควบคุมในแบบเดียวกัน. ตัวดูพื้นฐาน ไม่ เป็นความสามารถ — มันเป็นเงื่อนไขเบื้องต้น, เปิดเผยเป็น IsViewerLicensed บนบริการใบอนุญาต.
การตรวจสอบตอนเริ่มต้นโดยปกติจะป้องกันปลั๊กอินที่ไม่มีใบอนุญาตจากการเข้าสู่ pipeline ของคำขอ. ตัวสร้าง viewer ยังใช้กฎการทำงานแบบป้องกันสองข้อ, ซึ่งสำคัญหากสิทธิ์เปลี่ยนหลังจากเริ่มต้น:
- ปลั๊กอินแทนที่ตัวดูในตัว (ปลั๊กอินอ้างสิทธิ์ส่วนขยายที่รีจิสทรีในตัวก็จัดการได้): หากความสามารถได้รับใบอนุญาต, ตัวดูปลั๊กอินจะชนะ; หากไม่มี, Doconut จะย้อนกลับไปยังตัวดูในตัวอย่างเงียบ. ผู้ใช้ยังคงเห็นเอกสารของพวกเขา — แต่พวกเขาจะไม่ได้ฟีเจอร์ปลั๊กอิน.
- รูปแบบเฉพาะปลั๊กอิน (เช่น
.dcm— DICOM ไม่มีตัวดูในตัว): หากไม่มีความสามารถ การเรียกเปิดจะล้มเหลวอย่างรุนแรง:
LicenseException: This document type requires the 'Dicom' plugin license.ใบอนุญาต Temporary ที่ใช้งานอยู่ให้ทุกความสามารถ (พร้อมการดูพื้นฐานที่สะอาด, ไม่มีลายน้ำ). นี่เป็นแหล่งที่มาของความประหลาดใจเมื่อเปิดใช้งานจริง: การลงทะเบียนปลั๊กอินเดียวกันกับใบอนุญาตที่ซื้อซึ่งละเว้นหนึ่งในความสามารถของพวกมันทำให้ AddDoconut() ล้มเหลวระหว่างการเริ่มต้น. เปรียบเทียบ IsCapabilityGranted(...) กับแผนของคุณก่อนทำการปรับใช้. ด้านตรงข้าม: ด้วย ไม่มีใบอนุญาตเลย, ไม่มีอะไรได้รับการให้ — ใบอนุญาตที่หายไปไม่ใช่ใบอนุญาต Temporary.
การควบคุมเดียวกันปรากฏบนฝั่งไคลเอนต์: Viewer.ReferenceScripts() และ ReferenceCss() ส่งออกชุดสคริปต์/สไตล์สำหรับฟีเจอร์ที่ควบคุมด้วยใบอนุญาต (search, annotation, …) เฉพาะเมื่อ ใบอนุญาตเปิดใช้งาน, ดังนั้น UI ของวิดเจ็ตจะสอดคล้องกับสิ่งที่เซิร์ฟเวอร์จะทำจริง.
แผนที่ฟีเจอร์และปลั๊กอิน
UI ของผลิตภัณฑ์ใช้คำว่า "plugin" เป็นป้ายฟีเจอร์กว้าง, แต่การลงทะเบียนบนเซิร์ฟเวอร์แตกต่างกัน:
| ฟีเจอร์ | วิธีการเปิดใช้งาน | ความสามารถ | ให้การสนับสนุน |
|---|---|---|---|
| การอธิบาย | รวมอยู่ในตัวดู; รวมทรัพยากรการอธิบาย | Annotation | การสร้างในเบราว์เซอร์, การคงสภาพเซสชัน, และการส่งออกแบบฝัง |
| การค้นหา | รวมอยู่ในตัวดูรูปแบบที่ค้นหาได้; รวมทรัพยากรการค้นหาและเปิดใช้งานการสกัดเมื่อจำเป็น | Search | ดัชนีข้อความพื้นฐาน, ไฮไลท์, และการนำทางผลลัพธ์ |
| ตัวแปลง | ติดตั้ง Doconut.NETStandard.Converter และลงทะเบียน ConverterPlugin | Converter | บริการแปลง C# และวิดเจ็ตเว็บแบบเลือกได้ |
| DICOM | ติดตั้ง Doconut.NETStandard.Dicom และลงทะเบียน DicomPlugin | Dicom | การดูภาพการแพทย์สำหรับ .dcm และ .ima |
การอธิบายและการค้นหาปกติไม่ใช้ AddPlugin<TPlugin>(); ชุดของพวกมันจะถูกส่งออกเฉพาะเมื่อใบอนุญาตให้ความสามารถที่สอดคล้องกัน. ตัวแปลงและ DICOM เป็นการนำเสนอ IDoconutPlugin แบบ opt‑in ที่เผยแพร่สำหรับชุดเอกสารนี้.
ศิลปวัตถุ .NET Standard ที่ได้รับการอนุมัติมี Doconut.NETStandard.Converter และ Doconut.NETStandard.Dicom ในเวอร์ชันเดียวกับแพ็กเกจหลัก.
แพ็กเกจปลั๊กอินที่เผยแพร่
| ปลั๊กอิน | แพ็กเกจ | ความสามารถ | ให้การสนับสนุน |
|---|---|---|---|
| ตัวแปลง | Doconut.NETStandard.Converter | Converter | ความสามารถการแปลงเอกสาร |
| DICOM | Doconut.NETStandard.Dicom | Dicom | การดูภาพการแพทย์ (.dcm — รูปแบบเฉพาะปลั๊กอิน) |
แต่ละรายการมีหน้าที่อุทิศให้ภายใต้ Plugins พร้อมการกำหนดค่าและการใช้งาน.
ตัวดูแบบกำหนดเอง — ตัวจัดการรูปแบบของคุณ
คุณสามารถเชื่อมต่อตัวดูเข้ากับ pipeline ได้โดยไม่ต้องเขียนแพ็กเกจปลั๊กอิน, โดยตรงจาก Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // implements IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // กำหนดค่าเริ่มต้นแบบเลือกได้
});ตัวดูแบบกำหนดเองจะมีลำดับความสำคัญเหนือ ทุกอย่าง — ทั้งในตัวและปลั๊กอิน — และไม่ถูกควบคุมด้วยใบอนุญาต (พวกมันคือโค้ดของคุณ). ตัวสร้างจะย้อนกลับไปยัง ImageConfig เมื่อคุณไม่ได้ให้การกำหนดค่าเริ่มต้น.
สรุป
- ปลั๊กอินถูกลงทะเบียนอย่างชัดเจนและ
LicenseCapabilityของพวกมันจะถูกตรวจสอบระหว่างAddDoconut()— การขาดหรือสิทธิ์ไม่เพียงพอที่ไม่ใช่ Temporary จะล้มเหลวอย่างรวดเร็ว. - ปลั๊กอินแบบ Override จะลดระดับอย่างราบรื่น; รูปแบบเฉพาะปลั๊กอินจะล้มเหลวด้วย
LicenseException. - ใบอนุญาต Temporary ที่ใช้งานอยู่จะปลดล็อกทุกอย่าง; การผลิตจะปลดล็อกสิ่งที่คุณซื้อ. ตรวจสอบด้วย
IDoconutLicenseServiceก่อนส่ง.
หน้านี้เป็นประโยชน์หรือไม่?