Hệ thống Plugin
Mở rộng trình xem bằng các plugin
Lõi của Doconut vẫn gọn nhẹ; chức năng tùy chọn được cung cấp dưới dạng plugins — các gói NuGet riêng biệt đóng góp các trình xem hoặc dịch vụ và được bật bằng giấy phép của bạn. Trang này giải thích mô hình đăng ký, cách kiểm soát giấy phép hoạt động tại thời gian chạy, và cách tích hợp trình xem của riêng bạn.
Đăng ký một plugin
Mỗi gói plugin cung cấp một lớp plugin. Bạn đăng ký nó một lần, khi khởi động:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() khởi tạo plugin và gọi callback Register của nó đối với registry plugin được giữ trên DoconutOptions. Mọi thứ mà một plugin đóng góp đều được gắn thẻ với khả năng yêu cầu của plugin. AddDoconut() xác thực các plugin đã đăng ký ngay lập tức: thiếu giấy phép, tệp legacy TRIAL, hoặc giấy phép trả phí mà không có capability sẽ khiến khởi động thất bại với InvalidOperationException. Một đăng ký Temporary/Demo được giữ lại qua thời hạn, nhưng các capability thời gian chạy của nó sẽ bị thu hồi sau ngày hết hạn.
Hợp đồng
Một plugin thực hiện một giao diện được thiết kế cố ý nhỏ gọn:
public interface IDoconutPlugin
{
string Name { get; } // ví dụ: "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // cổng giấy phép
void Register(IDoconutPluginBuilder builder); // đóng góp các trình xem/dịch vụ
}Bên trong Register, builder chấp nhận hai loại đóng góp:
builder.RegisterViewer(".dcm", () => new DicomViewer())— một trình xem cho một phần mở rộng tệp,builder.RegisterService<TContract>(() => …)— một dịch vụ kiểu mà các phần khác của pipeline có thể tra cứu.
Khả năng và kiểm soát
Capabilities là các đơn vị giấy phép. Converter và Dicom được cung cấp dưới dạng plugin tùy chọn; Search và Annotation là các tính năng tích hợp sẵn được kiểm soát theo cùng cách. Trình xem cơ bản không phải là một capability — nó là điều kiện tiên quyết, được hiển thị dưới dạng IsViewerLicensed trên dịch vụ giấy phép.
Việc xác thực khi khởi động thường ngăn một plugin không có giấy phép tham gia vào pipeline yêu cầu. Nhà máy trình xem cũng áp dụng hai quy tắc thời gian chạy phòng thủ, quan trọng nếu quyền lợi thay đổi sau khi khởi động:
- Plugin ghi đè lên trình xem tích hợp sẵn (một plugin yêu cầu một phần mở rộng mà registry tích hợp sẵn cũng xử lý): nếu capability được cấp phép, trình xem plugin sẽ thắng; không có nó, Doconut im lặng chuyển về trình xem tích hợp sẵn. Người dùng vẫn thấy tài liệu của họ — họ chỉ không nhận được tính năng plugin.
- Định dạng chỉ có plugin (ví dụ
.dcm— DICOM không có trình xem tích hợp sẵn): nếu không có capability, lời gọi mở sẽ thất bại nghiêm trọng:
LicenseException: This document type requires the 'Dicom' plugin license.Một giấy phép Temporary hoạt động sẽ cấp mọi khả năng (với việc xem cơ bản sạch sẽ, không có watermark). Đây là nguồn gây bất ngờ phổ biến khi đưa vào hoạt động: đăng ký cùng các plugin với giấy phép mua nhưng thiếu một trong các capability khiến AddDoconut() thất bại trong quá trình khởi động. So sánh IsCapabilityGranted(...) với kế hoạch của bạn trước khi triển khai. Ngược lại: với không có giấy phép nào cả, không có gì được cấp — một giấy phép thiếu không phải là một giấy phép Temporary.
Cùng một cơ chế kiểm soát cũng xuất hiện phía client: Viewer.ReferenceScripts() và ReferenceCss() phát ra các gói script/style cho các tính năng được kiểm soát bằng giấy phép (tìm kiếm, chú thích, …) chỉ khi giấy phép cho phép chúng, vì vậy giao diện UI của widget vẫn nhất quán với những gì server thực sự thực hiện.
Bản đồ tính năng và plugin
Giao diện UI sản phẩm sử dụng “plugin” như một nhãn tính năng rộng, nhưng việc đăng ký trên server lại khác:
| Tính năng | Cách kích hoạt | Khả năng | Đóng góp |
|---|---|---|---|
| Annotation | Tích hợp sẵn trong trình xem; bao gồm các tài nguyên chú thích | Annotation | Tạo nội dung trên trình duyệt, duy trì phiên, và xuất bản có nhúng |
| Search | Tích hợp sẵn trong các trình xem định dạng có khả năng tìm kiếm; bao gồm tài nguyên tìm kiếm và cho phép trích xuất khi cần | Search | Chỉ mục văn bản gốc, đánh dấu, và điều hướng kết quả |
| Converter | Cài đặt Doconut.NET8.Converter và đăng ký ConverterPlugin | Converter | Dịch vụ chuyển đổi C# và widget web tùy chọn |
| DICOM | Cài đặt Doconut.NET8.Dicom và đăng ký DicomPlugin | Dicom | Xem hình ảnh y tế cho .dcm và .ima |
Annotation và Search bình thường không sử dụng AddPlugin<TPlugin>(); các bundle của chúng chỉ được phát ra khi giấy phép cấp khả năng tương ứng. Converter và DICOM là các triển khai IDoconutPlugin tùy chọn.
Các gói plugin đã phát hành
| Plugin | Gói | Khả năng | Đóng góp |
|---|---|---|---|
| Converter | Doconut.NET8.Converter | Converter | Khả năng chuyển đổi tài liệu |
| DICOM | Doconut.NET8.Dicom | Dicom | Xem hình ảnh y tế (.dcm — định dạng chỉ có plugin) |
Mỗi plugin có một trang riêng dưới Plugins với cấu hình và cách sử dụng của nó.
Trình xem tùy chỉnh — bộ xử lý định dạng của bạn
Bạn có thể tích hợp một trình xem vào pipeline mà không cần viết gói plugin, trực tiếp từ Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // thực hiện IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // cấu hình mặc định tùy chọn
});Trình xem tùy chỉnh có ưu tiên hơn mọi thứ — cả tích hợp sẵn và plugin — và không bị kiểm soát bằng giấy phép (chúng là mã của bạn). Nhà máy sẽ quay lại một ImageConfig khi bạn không cung cấp cấu hình mặc định.
Những điểm cần nhớ
- Các plugin được đăng ký một cách rõ ràng và
LicenseCapabilitycủa chúng được xác thực trong quá trìnhAddDoconut()— thiếu hoặc không đủ quyền không tạm thời sẽ thất bại nhanh. - Các plugin kiểu override giảm dần một cách nhẹ nhàng; các định dạng chỉ có plugin sẽ thất bại với một
LicenseException. - Một giấy phép Temporary hoạt động sẽ mở khóa mọi thứ; môi trường production mở khóa những gì bạn đã mua. Xác minh với
IDoconutLicenseServicetrước khi phát hành.
Trang này có hữu ích không?