ระบบปลั๊กอิน

ขยายตัวดูด้วยปลั๊กอิน

แกนหลักของ Doconut ยังคงเบา; ฟังก์ชันเสริมจะถูกจัดส่งเป็น ปลั๊กอิน — แพคเกจ NuGet แยกที่ให้ผู้ดูหรือบริการและเปิดใช้งานโดยใบอนุญาตของคุณ. หน้านี้อธิบายโมเดลการลงทะเบียน, สิ่งที่เกิดขึ้นเมื่อเริ่มต้นเมื่อใบอนุญาตไม่ครอบคลุมปลั๊กอิน, และวิธีการเชื่อมต่อผู้ดูของคุณเอง.

การลงทะเบียนปลั๊กอิน

แต่ละแพคเกจปลั๊กอินจะเปิดเผยคลาสปลั๊กอินหนึ่งตัว. ลงทะเบียนมันครั้งเดียวใน Application_Start:

csharp
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:

text
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 ก่อน — ดู การตั้งค่าใบอนุญาต.

สัญญา

ปลั๊กอินทำการนำเข้าตามอินเทอร์เฟซที่มีขนาดเล็กโดยเจตนา:

csharp
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 ไม่มีตัวดูในตัว): หากไม่มีความสามารถ, การเปิดจะล้มเหลว:
text
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 และลงทะเบียน ConverterPluginConverterบริการแปลง C# และวิดเจ็ตเว็บตัวเลือก
DICOMติดตั้ง Doconut.NETFramework.Dicom และลงทะเบียน DicomPluginDicomการดูภาพการแพทย์สำหรับ .dcm และ .ima

Annotation และ Search ไม่ใช้ AddPlugin<TPlugin>(). Converter และ DICOM มีหน้าของตนภายใต้ ปลั๊กอิน พร้อมการกำหนดค่าและการใช้งาน. ในแพคเกจนี้, DICOM แสดงผลหน้า, เฟรม, และแอนิเมชัน, แต่ไม่อ่านเมตาดาต้าเชิงเทคนิค — ดู ปลั๊กอิน DICOM.

ตัวดูแบบกำหนดเอง — ตัวจัดการรูปแบบของคุณ

คุณสามารถเชื่อมต่อผู้ดูเข้ากับ pipeline โดยไม่ต้องเขียนแพคเกจปลั๊กอิน, โดยตรงใน Application_Start:

csharp
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 ก่อนส่ง.

หน้านี้เป็นประโยชน์หรือไม่?