ระบบปลั๊กอิน
ขยายตัวดูด้วยปลั๊กอิน
แกนหลักของ 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() ตรวจสอบปลั๊กอินที่ลงทะเบียนทันที: ใบอนุญาตหาย, ไฟล์ TRIAL รุ่นเก่า, หรือใบอนุญาตแบบชำระเงินที่ไม่มีความสามารถดังกล่าวจะทำให้การเริ่มต้นล้มเหลวด้วย InvalidOperationException. การลงทะเบียนแบบ Temporary/Demo จะคงอยู่หลังจากหมดอายุ, แต่ความสามารถในระหว่างการทำงานจะถูกยกเลิกหลังจากวันหมดอายุ.
สัญญา
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 มีให้เป็นปลั๊กอินแบบเลือกใช้; Search และ Annotation เป็นฟีเจอร์ในตัวที่ถูกควบคุมด้วยวิธีเดียวกัน. ตัวดูหลัก ไม่ เป็นความสามารถ — มันเป็นเงื่อนไขเบื้องต้น, เปิดเผยเป็น IsViewerLicensed บนบริการใบอนุญาต.
การตรวจสอบความถูกต้องในขั้นตอนเริ่มต้นโดยทั่วไปจะป้องกันปลั๊กอินที่ไม่มีใบอนุญาตจากการเข้าสู่ pipeline. ตัวสร้าง viewer ยังใช้กฎการทำงานสองข้อเพื่อความปลอดภัย, ซึ่งสำคัญหากสิทธิ์เปลี่ยนแปลงหลังจากเริ่มต้น:
- ปลั๊กอินทับตัวดูในตัว (ปลั๊กอินอ้างอิงนามสกุลที่ registry ในตัวก็จัดการได้): หากมีความสามารถที่ได้รับใบอนุญาต, ตัวดูจากปลั๊กอินจะชนะ; หากไม่มี, 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 | ฝังอยู่ในตัวดู; รวมทรัพยากรการทำหมายเหตุ | Annotation | การเขียนในเบราว์เซอร์, การคงสภาพเซสชัน, และการส่งออกที่ฝังไว้ |
| Search | ฝังอยู่ในตัวดูรูปแบบที่ค้นหาได้; รวมทรัพยากรการค้นหาและเปิดใช้งานการสกัดข้อมูลเมื่อจำเป็น | Search | ดัชนีข้อความพื้นฐาน, ไฮไลท์, และการนำทางผลลัพธ์ |
| Converter | ติดตั้ง Doconut.NET6.Converter และลงทะเบียน ConverterPlugin | Converter | บริการแปลง C# และวิดเจ็ตเว็บเสริม (optional) |
| DICOM | ติดตั้ง Doconut.NET6.Dicom และลงทะเบียน DicomPlugin | Dicom | การดูภาพทางการแพทย์สำหรับ .dcm และ .ima |
Annotation และ Search ปกติไม่ใช้ AddPlugin<TPlugin>(); แพ็กเกจของพวกมันจะถูกสร้างขึ้น เฉพาะเมื่อ ใบอนุญาตมอบความสามารถที่สอดคล้อง. Converter และ DICOM เป็นการนำไปใช้ IDoconutPlugin แบบเลือกใช้ที่ปล่อยออกมาสำหรับชุดเอกสารนี้.
ศิลปวัตถุ .NET 6 ที่ได้รับการอนุมัติมี Doconut.NET6.Converter และ Doconut.NET6.Dicom ที่เวอร์ชันเดียวกับแพ็กเกจแกน.
แพ็กเกจปลั๊กอินที่ปล่อยออกมา
| ปลั๊กอิน | แพ็กเกจ | ความสามารถ | การสนับสนุน |
|---|---|---|---|
| Converter | Doconut.NET6.Converter | Converter | ความสามารถการแปลงเอกสาร |
| DICOM | Doconut.NET6.Dicom | Dicom | การดูภาพทางการแพทย์ (.dcm — รูปแบบเฉพาะปลั๊กอิน) |
แต่ละรายการมีหน้าที่อุทิศให้ภายใต้ Plugins พร้อมการกำหนดค่าและวิธีการใช้งานของมัน.
ตัวดูแบบกำหนดเอง — ตัวจัดการรูปแบบของคุณ
คุณสามารถเชื่อมต่อ viewer เข้ากับ pipeline ได้โดยไม่ต้องเขียนแพ็กเกจปลั๊กอิน, โดยตรงจาก Program.cs:
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ก่อนส่งมอบ.
หน้านี้เป็นประโยชน์หรือไม่?