ระบบปลั๊กอิน
ขยายตัวดูด้วยปลั๊กอิน
แกนหลักของ Doconut ยังคงเบา; ฟังก์ชันเสริมจะถูกจัดส่งเป็น ปลั๊กอิน — แพคเกจ NuGet แยกที่ให้ผู้ดูหรือบริการและเปิดใช้งานโดยใบอนุญาตของคุณ. หน้านี้อธิบายโมเดลการลงทะเบียน, สิ่งที่เกิดขึ้นเมื่อเริ่มต้นเมื่อใบอนุญาตไม่ครอบคลุมปลั๊กอิน, และวิธีการเชื่อมต่อผู้ดูของคุณเอง.
การลงทะเบียนปลั๊กอิน
แต่ละแพคเกจปลั๊กอินจะเปิดเผยคลาสปลั๊กอินหนึ่งตัว. ลงทะเบียนมันครั้งเดียวใน Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// ปลั๊กอินที่ลงทะเบียนซึ่งไม่มีใบอนุญาตจะโยนที่นี่ใน Application_Start และ
// ไซต์จะตอบทุกคำขอด้วย 500 ว่างเปล่า เหตุผลอยู่ใน Windows event log.AddPlugin<TPlugin>() สร้างปลั๊กอินและให้มันลงทะเบียนการสนับสนุนของมันกับ DoconutOptions. ทุกอย่างที่ปลั๊กอินสนับสนุนจะถูกแท็กด้วย ความสามารถที่ต้องการ ของปลั๊กอิน, และ DoconutHost.Initialize ตรวจสอบปลั๊กอินที่ลงทะเบียนทั้งหมดกับใบอนุญาตก่อนที่ไซต์จะให้บริการคำขอแรก.
ใบอนุญาตปลั๊กอินที่หายไปทำให้ไซต์หยุดทำงาน
เมื่อไม่มีใบอนุญาตที่ใช้งานให้ความสามารถของปลั๊กอินที่ลงทะเบียน — ไม่มีใบอนุญาตเลย, ไฟล์ legacy TRIAL, หรือใบอนุญาตที่ชำระแล้วแต่ไม่มีความสามารถนั้น — DoconutHost.Initialize จะโยน InvalidOperationException จาก Application_Start:
The Converter plugin is registered via AddPlugin but no active license grants Converter.
Remove the AddPlugin<...>() call or install a license (or trial/demo) that includes Converter.ใน System.Web, ข้อยกเว้นใน Application_Start จะไม่สร้างหน้าข้อผิดพลาด. ทุกคำขอตอบด้วย 500 ว่าง, บันทึก IIS ไม่แสดงอะไรที่เป็นประโยชน์, และข้อความปรากฏเฉพาะใน Windows event log (Application log, source ASP.NET). เมื่อไซต์หยุดตอบสนองทันทีหลังจากเพิ่มบรรทัด AddPlugin, ตรวจสอบไฟล์ใบอนุญาตใน wwwroot ก่อน — ดู การตั้งค่าใบอนุญาต.
สัญญา
ปลั๊กอินทำการนำเข้าตามอินเทอร์เฟซที่มีขนาดเล็กโดยเจตนา:
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 ของคำขอ. โรงงานตัวดูยังใช้กฎการป้องกันสองข้อ, ซึ่งสำคัญหากสิทธิ์เปลี่ยนแปลงขณะไซต์ทำงาน:
- ปลั๊กอินที่แทนที่ตัวดูในตัว (มันอ้างสิทธิ์ส่วนขยายที่ตัวดูในตัวก็จัดการได้): หากมีความสามารถที่ได้รับใบอนุญาต, ตัวดูของปลั๊กอินจะชนะ; หากไม่มี, Doconut จะกลับไปใช้ตัวดูในตัว. ผู้ใช้ยังคงเห็นเอกสารของพวกเขา; แต่ไม่ได้รับพฤติกรรมของปลั๊กอิน.
- รูปแบบเฉพาะปลั๊กอิน (
.dcmและ.ima— DICOM ไม่มีตัวดูในตัว): หากไม่มีความสามารถ, การเปิดจะล้มเหลว:
LicenseException: This document type requires the 'Dicom' plugin license.ใบอนุญาต Temporary ที่ใช้งานอยู่ให้ทุกความสามารถ. นั่นคือความประหลาดใจคลาสสิกเมื่อเปิดใช้งานจริง: บรรทัด AddPlugin เดียวกันที่ทำงานในช่วงประเมินจะทำให้ไซต์หยุดเมื่อใบอนุญาตที่ซื้อขาดความสามารถหนึ่ง. เปรียบเทียบ IsCapabilityGranted(...) กับสิ่งที่คุณซื้อก่อนการปรับใช้. ด้วย ไม่มีใบอนุญาตเลย, ไม่มีอะไรถูกมอบให้ — ใบอนุญาตที่หายไปไม่ใช่ใบอนุญาต Temporary.
การจำกัดเดียวกันนี้ส่งผลถึงเบราว์เซอร์: Viewer.ReferenceScripts() และ ReferenceCss() ส่งไฟล์สำหรับคุณลักษณะที่จำกัดโดยใบอนุญาต (Search, Annotation) เฉพาะเมื่อ ใบอนุญาตมอบให้, ดังนั้นหน้าจะไม่เสนอคุณลักษณะที่เซิร์ฟเวอร์จะปฏิเสธ.
แผนที่คุณลักษณะและปลั๊กอิน
| คุณลักษณะ | วิธีเปิดใช้งาน | ความสามารถ | การสนับสนุน |
|---|---|---|---|
| Annotation | รวมอยู่ในตัวดู; รวมทรัพยากรคำอธิบาย | Annotation | การสร้างในเบราว์เซอร์, การคงสภาพเซสชัน, การส่งออกที่ฝังไว้ |
| Search | รวมอยู่ในตัวดูรูปแบบที่ค้นหาได้; รวมทรัพยากรการค้นหา | Search | ดัชนีข้อความพื้นฐาน, ไฮไลท์, การนำทางผลลัพธ์ |
| Converter | ติดตั้ง Doconut.NETFramework.Converter และลงทะเบียน ConverterPlugin | Converter | บริการแปลง C# และวิดเจ็ตเว็บตัวเลือก |
| DICOM | ติดตั้ง Doconut.NETFramework.Dicom และลงทะเบียน DicomPlugin | Dicom | การดูภาพการแพทย์สำหรับ .dcm และ .ima |
Annotation และ Search ไม่ใช้ AddPlugin<TPlugin>(). Converter และ DICOM มีหน้าของตนภายใต้ ปลั๊กอิน พร้อมการกำหนดค่าและการใช้งาน. ในแพคเกจนี้, DICOM แสดงผลหน้า, เฟรม, และแอนิเมชัน, แต่ไม่อ่านเมตาดาต้าเชิงเทคนิค — ดู ปลั๊กอิน DICOM.
ตัวดูแบบกำหนดเอง — ตัวจัดการรูปแบบของคุณ
คุณสามารถเชื่อมต่อผู้ดูเข้ากับ pipeline โดยไม่ต้องเขียนแพคเกจปลั๊กอิน, โดยตรงใน Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // ทำการ implements IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // config เริ่มต้นแบบเลือกได้
});ตัวดูแบบกำหนดเองมีลำดับความสำคัญเหนือ ทุกอย่าง — ทั้งในตัวและปลั๊กอิน — และไม่ได้จำกัดโดยใบอนุญาต: พวกมันคือโค้ดของคุณ. เมื่อคุณไม่ได้ให้การกำหนดค่าเริ่มต้น, โรงงานจะใช้ ImageConfig.
สิ่งที่ควรจำ
- ปลั๊กอินถูกลงทะเบียนอย่างชัดเจนใน
DoconutHost.Initialize, และความสามารถของพวกมันได้รับการตรวจสอบที่นั่น; สิทธิ์ที่หายไปทำให้ไซต์หยุดด้วย500ว่างที่เหตุผลอยู่ใน Windows event log. - ปลั๊กอินแบบ Override ลดระดับอย่างราบรื่น; รูปแบบเฉพาะปลั๊กอินล้มเหลวด้วย
LicenseException. - ใบอนุญาต Temporary ที่ใช้งานอยู่ปลดล็อกทุกอย่าง; การผลิตปลดล็อกสิ่งที่คุณซื้อ. ตรวจสอบกับ
IDoconutLicenseServiceก่อนส่ง.
หน้านี้เป็นประโยชน์หรือไม่?