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(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Xây dựng DoconutOptions, kiểm tra chúng ngay lập tức (xem DoconutOptions → Kiểm tra khởi động), và đăng ký toàn bộ đồ thị dịch vụ:
| Dịch vụ | Thời gian tồn tại | Vai trò |
|---|---|---|
DoconutOptions | Singleton | Đối tượng cấu hình |
IViewerFactory | Singleton | Ánh xạ các phần mở rộng tới trình xem định dạng |
IDocumentSessionManager | Singleton | Token → bộ nhớ cache 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) |
PageImageService | Singleton | Pipeline hình ảnh trang (đánh dấu/ xoay/ thu phóng/ chú thích) |
| Document security (access store) | Singleton | Cấp quyền cho việc ràng buộc token‑to‑session |
Viewer | Transient | Giao diện công khai mở/đóng |
DocumentConverter | Transient | Giao diện chuyển đổi — yêu cầu plugin Converter |
DistributedDocumentPublisher | — | Phát hành các tài liệu của một tài liệu lên lưu trữ chia sẻ |
Health check "doconut" | — | Báo cáo trạng thái giấy phép/hết hạn 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 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ó. Giải quyết
DocumentConvertermà không cóoptions.AddPlugin<ConverterPlugin>()sẽ ném lỗi:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Quyền plugin được kiểm tra khi khởi động. Thiếu giấy phép, tệp
TRIALcũ, hoặc giấy phép trả phí mà không có khả năng plugin đã đăng ký sẽ thất bại tại thời điểmAddDoconut(). Các đăng ký tạm thời/Demo tồn tại sau ngày hết hạn, trong khi các cổng runtime sẽ 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 — hãy ánh xạ 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 hình ảnh trang Doconut. Nó trả lời mọi yêu cầu có 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 được kết nối tự động trước middleware này.
Nó không nhận bất kỳ đối số nào. Việc truyền một thể hiện 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() tạo 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/..., thì lời gọi này bị thiếu hoặc đặt sai vị trí.
Đây là cách thay thế được hỗ trợ cho việc tự tay kết nối middleware tài nguyên nhúng bằng app.UseMiddleware<EmbeddedResourceMiddleware>().
Serving from shared storage
Hai đăng ký bổ sung tồn tại cho các triển khai mà nút thực hiện 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 phủ toàn diện trong Triển khai phân tán; các chữ ký là:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...) // shared backing store for widget uploadsPhầ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 cách ánh xạ từng cài đặt.
Ordering recap
app.UseRouting();
app.UseSession(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut(); // 2nd Doconut call (or via a MapWhen branch)Trang này có hữu ích không?