DoconutOptions

Cấu hình các dịch vụ Doconut

DoconutOptions (namespace Doconut) là đối tượng cấu hình duy nhất cho toàn bộ SDK. Bạn cấu hình nó một lần, trong AddDoconut(), và nó được đăng ký dưới dạng singleton.

Đây là một sự thay đổi về vị trí cũng như hình dạng. Trong thư viện .NET Standard trước đây, một instance của DoconutOptions được tạo ra vào thời điểm pipeline và được truyền cho UseDoconut(new DoconutOptions { … }). Ở đây middleware không nhận bất kỳ tùy chọn nào — tất cả được thiết lập trong quá trình đăng ký dịch vụ.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath     = "Doconut.Viewer.lic";
    options.UnsafeMode      = false;
    options.ShowDoconutInfo = false;
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

Thuộc tính

KiểuThuộc tínhMặc địnhMô tả
boolShowDoconutInfofalseKhi true, một yêu cầu middleware không có token sẽ trả về một biểu ngữ phiên bản thay vì 404. Hữu ích như một kiểm tra nhanh; để false trong môi trường sản xuất.
boolUnsafeModefalseKhi true, bỏ qua kiểm tra bảo mật ASP.NET‑session trên các yêu cầu trang. Để false trong môi trường sản xuất trên một node duy nhất (xem Core Concepts → Sessions & Security). Trước đây viết là UnSafeMode.
stringMiddlewarePath"/doconut"Giá trị phối hợp cho endpoint trang‑hình ảnh. Nó được xác thực, nhưng không gắn một nhánh pipeline; giữ nó đồng nhất với ánh xạ thực tế của UseDoconut()BasePath của client.
stringResourcesPath"/doconut-res"Tiền tố đường dẫn URL cho các tài nguyên JS/CSS/hình ảnh/phông chữ được nhúng.
stringLicensePath""Đường dẫn tới tệp giấy phép. Trống → nguồn giấy phép tiếp theo, sau đó tự động khám phá; không tìm thấy gì → trạng thái đánh dấu nước đánh giá không có khả năng.
stringLicenseContent""Nội dung giấy phép XML thô (cơ sở dữ liệu, biến môi trường, secret manager). Có ưu tiên hơn LicensePath.
Stream?LicenseStreamnullGiấy phép dưới dạng stream, đọc một lần khi khởi động. Có ưu tiên hơn cả hai nguồn khác.
boolResetLicensefalseCờ tương thích dự phòng. Triển khai hiện tại không sử dụng nó; khởi động lại ứng dụng sau khi thay thế giấy phép.
DoconutPluginRegistryPluginRegistryRegistry chỉ đọc thu thập các đóng góp plugin; được sử dụng bởi factory của trình xem. Điền dữ liệu qua AddPlugin<T>().

Thứ tự ưu tiên giấy phép (được thực thi khi đăng ký dịch vụ): LicenseStreamLicenseContentLicensePath → tự động khám phá (xem Getting Started → License Setup).

Phương thức

AddPlugin()

text
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()

Sử dụng phương thức này cho các gói Converter và DICOM được phát hành dạng opt‑in. Annotation và Search bình thường là các tính năng có giấy phép tích hợp sẵn và không sử dụng AddPlugin<TPlugin>().

Đăng ký một plugin nội bộ (Converter, DICOM). Fluent — trả về instance của options. AddDoconut() ném InvalidOperationException khi thiếu giấy phép, tệp TRIAL cũ, hoặc giấy phép trả phí không cấp quyền cho plugin. Các đăng ký tạm thời/Demo được giữ lại sau khi hết hạn và sẽ chịu rào cản thời gian chạy (xem Core Concepts → Plugin System).

Widget Converter dạng opt‑in được kích hoạt bằng AddConverterWidget() và được hiển thị qua thuộc tính chỉ đọc ConverterWidget; các tùy chọn của nó được tài liệu hoá trên trang Plugin Converter (Plugins → Converter Plugin).

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — leading dot optional
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

Đăng ký một trình xem tùy chỉnh cho một phần mở rộng tệp. Trình xem tùy chỉnh có ưu tiên hơn các trình xem tích hợp sẵn và plugin và không bị giới hạn bởi giấy phép. Khi defaultConfig bị bỏ qua và một tài liệu mở mà không có cấu hình rõ ràng, một ImageConfig sẽ được sử dụng.

Ném ArgumentException (Extension must be a non-empty file extension.) cho phần mở rộng trống và ArgumentNullException cho factory null.

Xác thực khi khởi động

AddDoconut() xác thực các tùy chọn fail‑fast, vì vậy một cấu hình sai sẽ xuất hiện dưới dạng ngoại lệ rõ ràng khi khởi động thay vì các lỗi 404 gây nhầm lẫn khi yêu cầu:

text
DoconutOptions.MiddlewarePath phải là một đường dẫn không rỗng bắt đầu bằng '/'.
DoconutOptions.ResourcesPath phải là một đường dẫn không rỗng bắt đầu bằng '/'.
DoconutOptions.MiddlewarePath và ResourcesPath phải là các đường dẫn khác nhau.

Cấu hình thường dùng

csharp
// Production: explicit license, everything locked down (all security defaults)
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});

// Custom paths (e.g. to avoid a route conflict)
builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});

Khi bạn thay đổi ResourcesPath, hãy đồng bộ ResPath của widget client (xem ViewerConfig). Đây là một trong hai cài đặt phía client sẽ thất bại mà không có thông báo lỗi.

MiddlewarePath không phải là một bộ định tuyến tự động của ASP.NET Core. Nếu Doconut chỉ trả lời dưới một tiền tố tùy chỉnh, gắn UseDoconut() vào nhánh đó (ví dụ với app.Map("/docs-engine", branch => branch.UseDoconut())) và đặt BasePath của client thành cùng URL. Ứng dụng tham chiếu thay vào đó giữ dạng yêu cầu lịch sử DocImage.axd trên một nhánh MapWhen với BasePath: '/'.

Trang này có hữu ích không?