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.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // SEBELUM UseDoconut()
app.UseDoconut();AddDoconut
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:
| Layanan | Siklus Hidup | Peran |
|---|---|---|
DoconutOptions | Singleton | Objek konfigurasi |
| Layanan cache sesi | Singleton | Token → cache sesi (IMemoryCache juga terdaftar) |
IDoconutLicenseService | Singleton | Lisensi dimuat sekali saat startup (prioritas: LicenseStream → LicenseContent → LicensePath → pencarian otomatis) |
| Pipeline halaman-gambar | Singleton | Melakukan pemrosesan gambar untuk halaman (tanda air, rotasi, skala, anotasi) |
| Keamanan dokumen (penyimpanan akses) | Singleton | Memberikan hak untuk pengikatan token-ke-sesi |
Viewer | Transient | Fasada publik buka/tutup |
DocumentConverter | Transient | Fasada 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
DocumentConverterwithoutoptions.AddPlugin<ConverterPlugin>()throws:
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 waktuAddDoconut(). 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:
app.MapHealthChecks("/health");UseDoconut
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:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
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:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // antrian publikasi latar belakang opt-in
IServiceCollection AddDoconutDistributedWidgets(...) // penyimpanan pendukung bersama untuk unggahan widgetBagian pembacaan adalah middleware terpisah dari paket Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) dan WebFarmOptions tidak ada dalam rilis ini. Lihat panduan migrasi untuk pemetaan pengaturan demi pengaturan.
Ordering recap
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?