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.

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();

AddDoconut

text
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ạiVai trò
DoconutOptionsSingletonĐối tượng cấu hình
IViewerFactorySingletonÁnh xạ các phần mở rộng tới trình xem định dạng
IDocumentSessionManagerSingletonToken → bộ nhớ cache phiên (IMemoryCache cũng được đăng ký)
IDoconutLicenseServiceSingletonGiấy phép được tải một lần khi khởi động (ưu tiên: LicenseStreamLicenseContentLicensePath → tự động tìm kiếm)
PageImageServiceSingletonPipeline hình ảnh trang (đánh dấu/ xoay/ thu phóng/ chú thích)
Document security (access store)SingletonCấp quyền cho việc ràng buộc token‑to‑session
ViewerTransientGiao diện công khai mở/đóng
DocumentConverterTransientGiao diện chuyển đổi — yêu cầu plugin Converter
DistributedDocumentPublisherPhá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 DocumentConverter mà không có options.AddPlugin<ConverterPlugin>() sẽ ném lỗi:
text
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 TRIAL cũ, 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ểm AddDoconut(). 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:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
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 UnsafeModefalse, 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ử:

csharp
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

UseDoconutResources

text
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à:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...)        // shared backing store for widget uploads

Phần đọc là một middleware riêng biệt từ gói Doconut.Clouds:

text
IApplicationBuilder UseDoconutCloud<THandler>(
    this IApplicationBuilder app,
    Action<CloudOptions>? configure = null,
    string pathPrefix = "/doconut-cloud")
    where THandler : BaseCloudHandler

UseDoconutWebFarm(...)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

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