DoconutExtensions

Pendaftaran layanan dan middleware

DoconutExtensions (namespace Doconut.Middleware) adalah kelas statis dengan tiga pemanggilan yang dilakukan setiap host Doconut: satu pendaftaran layanan dan dua pendaftaran middleware.

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

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

Membangun DoconutOptions, memvalidasi mereka secara fail-fast (lihat DoconutOptions → Validasi Startup), dan mendaftarkan grafik layanan lengkap:

LayananSiklus HidupPeran
DoconutOptionsSingletonObjek konfigurasi
Layanan cache sesiSingletonToken → cache sesi (IMemoryCache juga terdaftar)
IDoconutLicenseServiceSingletonLisensi dimuat sekali saat startup (prioritas: LicenseStream → LicenseContent → LicensePath → pencarian otomatis)
Pipeline halaman-gambarSingletonMelakukan pemrosesan gambar untuk halaman (tanda air, rotasi, skala, anotasi)
Keamanan dokumen (penyimpanan akses)SingletonMemberikan hak untuk pengikatan token-ke-sesi
ViewerTransientFasada publik buka/tutup
DocumentConverterTransientFasada konversi — memerlukan plugin Converter
DistributedDocumentPublisher—Menerbitkan artefak dokumen ke penyimpanan bersama
Pemeriksaan kesehatan "doconut"—Melaporkan status lisensi/kedaluwarsa melalui pemeriksaan kesehatan ASP.NET

Tidak ada pemanggilan yang setara dalam perpustakaan .NET Standard sebelumnya. Itu membangun new Viewer(cache, accessor) per permintaan dan meneruskan opsi ke middleware; keduanya digantikan oleh pendaftaran tunggal ini.

Dua perilaku yang penting diketahui:

  • Converter memerlukan plugin-nya. Resolving DocumentConverter without options.AddPlugin<ConverterPlugin>() throws:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • Hak plugin divalidasi saat startup. Lisensi yang hilang, file legacy TRIAL, atau lisensi berbayar tanpa kemampuan plugin yang terdaftar gagal pada waktu AddDoconut(). Pendaftaran Sementara/Demo bertahan melewati tanggal kedaluwarsa, sementara gerbang runtime mencabut kemampuan yang kedaluwarsa.

Pemeriksaan kesehatan terintegrasi dengan mekanisme standar ASP.NET Core — petakan jika Anda ingin status lisensi pada endpoint kesehatan Anda:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Menambahkan middleware halaman-gambar Doconut. Ini menjawab setiap permintaan yang membawa parameter kueri ?token= — halaman, thumbnail, pencarian, anotasi, aksi halaman (tabel permintaan lengkap ada di Core Concepts → How the Viewer Works). Ketika UnsafeMode adalah false, lapisan keamanan dokumen secara otomatis terhubung sebelumnya.

Tidak memerlukan argumen. Menyertakan instance DoconutOptions di sini adalah bentuk perpustakaan sebelumnya dan tidak lagi dapat dikompilasi.

Contoh referensi mengarahkan permintaan widget melalui cabang jalur, mempertahankan bentuk permintaan historis:

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

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

Melayani JS, CSS, gambar, dan font yang tersemat di DoconutOptions.ResourcesPath (default /doconut-res). Ini adalah file yang Viewer.ReferenceCss() / ReferenceScripts() menghasilkan tag untuknya.

Selalu panggil sebelum UseDoconut(). Jika area penampil tetap kosong dan konsol browser menampilkan 404 untuk /doconut-res/..., pemanggilan ini hilang atau berada di tempat yang salah.

Ini adalah pengganti yang didukung untuk menghubungkan middleware penanganan sumber daya tersemat secara manual.

Serving from shared storage

Dua pendaftaran tambahan ada untuk penyebaran di mana node yang merender dokumen tidak selalu merupakan node yang melayani halamannya. Keduanya dibahas secara menyeluruh dalam Distributed Deployments; tanda tangan adalah:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // antrian publikasi latar belakang opt-in
IServiceCollection AddDoconutDistributedWidgets(...)        // penyimpanan pendukung bersama untuk unggahan widget

Bagian pembacaan adalah middleware terpisah dari paket Doconut.Clouds:

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

UseDoconutWebFarm(...) dan WebFarmOptions tidak ada dalam rilis ini. Lihat panduan migrasi untuk pemetaan pengaturan demi pengaturan.

Ordering recap

csharp
app.UseRouting();
app.UseSession();          // diperlukan ketika UnsafeMode = false
app.UseDoconutResources(); // panggilan Doconut pertama
app.UseDoconut();          // panggilan Doconut kedua (atau melalui cabang MapWhen)

Apakah halaman ini membantu?