DoconutExtensions
Đăng ký dịch vụ và middleware
DoconutExtensions (namespace Doconut.Middleware) là lớp tĩnh chứa ba lời gọi mà mọi máy chủ Doconut thực hiện: một đăng ký dịch vụ và hai đăng ký middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // TRƯỚC UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Xây dựng DoconutOptions, xác thực chúng nhanh chóng (xem DoconutOptions → Startup validation), và đăng ký toàn bộ đồ thị dịch vụ:
| Service | Lifetime | Role |
|---|---|---|
DoconutOptions | Singleton | Đối tượng cấu hình |
| Dịch vụ bộ nhớ đệm phiên | Singleton | Token → bộ nhớ đệm phiên (IMemoryCache cũng được đăng ký) |
IDoconutLicenseService | Singleton | Giấy phép được tải một lần khi khởi động (độ ưu tiên: LicenseStream → LicenseContent → LicensePath → tự động tìm kiếm) |
| Quy trình xử lý trang-ảnh | Singleton | Thực hiện xử lý ảnh cho các trang (đánh dấu, xoay, thu phóng, chú thích) |
| Bảo mật tài liệu (kho lưu trữ truy cập) | Singleton | Cấp quyền cho việc ràng buộc token‑to‑session |
Viewer | Transient | Giao diện mở/đóng công cộng |
DocumentConverter | Transient | Giao diện chuyển đổi — yêu cầu plugin Converter |
DistributedDocumentPublisher | — | Xuất bản các artefact của tài liệu lên lưu trữ chia sẻ |
Kiểm tra sức khỏe "doconut" | — | Báo cáo trạng thái giấy phép/hết hạn thông qua kiểm tra sức khỏe ASP.NET |
Không có lời gọi tương đương trong thư viện .NET Standard trước đây. Nó đã tạo new Viewer(cache, accessor) cho mỗi yêu cầu và truyền các tùy chọn tới middleware; cả hai đều được thay thế bằng đăng ký duy nhất này.
Hai hành vi đáng lưu ý:
- Converter yêu cầu plugin của nó. Việc giải quyết
DocumentConvertermà không cóoptions.AddPlugin<ConverterPlugin>()sẽ ném ngoại lệ:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Quyền plugin được xác thực khi khởi động. Một giấy phép thiếu, tệp legacy
TRIAL, hoặc giấy phép trả phí mà không có khả năng plugin đã đăng ký sẽ thất bại vào thời điểmAddDoconut(). Các đăng ký tạm thời/Demo tồn tại qua ngày hết hạn, trong khi các cổng runtime thu hồi các khả năng đã hết hạn.
Kiểm tra sức khỏe tích hợp với cơ chế chuẩn của ASP.NET Core — ánh xạ nó nếu bạn muốn trạng thái giấy phép trên endpoint sức khỏe của mình:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Thêm middleware page-image của Doconut. Nó trả lời mọi yêu cầu mang tham số truy vấn ?token= — các trang, hình thu nhỏ, tìm kiếm, chú thích, hành động trang (bảng yêu cầu đầy đủ nằm trong Core Concepts → How the Viewer Works). Khi UnsafeMode là false, lớp bảo mật tài liệu sẽ được tự động kết nối trước nó.
Nó không nhận bất kỳ đối số nào. Việc truyền một instance DoconutOptions ở đây là cách của thư viện trước và hiện không còn biên dịch được.
Mẫu tham chiếu định tuyến các yêu cầu của widget qua một nhánh đường dẫn, giữ nguyên dạng yêu cầu lịch sử:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Cung cấp các tệp JS, CSS, hình ảnh và phông chữ nhúng tại DoconutOptions.ResourcesPath (mặc định /doconut-res). Đây là các tệp mà Viewer.ReferenceCss() / ReferenceScripts() phát ra thẻ cho.
Luôn gọi nó trước UseDoconut(). Nếu khu vực viewer trống và console trình duyệt hiển thị lỗi 404 cho /doconut-res/..., lời gọi này bị thiếu hoặc đặt sai vị trí.
Đây là sự thay thế được hỗ trợ cho việc kết nối middleware xử lý tài nguyên nhúng một cách thủ công.
Phục vụ từ lưu trữ chia sẻ
Hai đăng ký bổ sung tồn tại cho các triển khai nơi nút render tài liệu không nhất thiết là nút phục vụ các trang của nó. Cả hai đều được bao quát từ đầu đến cuối trong Triển khai phân tán; các chữ ký là:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // hàng đợi xuất bản nền cho phép đăng ký
IServiceCollection AddDoconutDistributedWidgets(...) // kho lưu trữ hỗ trợ chia sẻ cho việc tải lên widgetPhần đọc là một middleware riêng biệt từ gói Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) và WebFarmOptions không tồn tại trong phiên bản này. Xem hướng dẫn di chuyển để biết ánh xạ từng cài đặt.
Tóm tắt thứ tự
app.UseRouting();
app.UseSession(); // cần thiết khi UnsafeMode = false
app.UseDoconutResources(); // Lần gọi Doconut đầu tiên
app.UseDoconut(); // Lần gọi Doconut thứ hai (hoặc qua một nhánh MapWhen)Trang này có hữu ích không?