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