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(); // BEFORE UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Membangun DoconutOptions, memvalidasinya secara cepat (lihat DoconutOptions → Validasi Startup), dan mendaftarkan seluruh grafik layanan:
| Layanan | Umur | Peran |
|---|---|---|
DoconutOptions | Singleton | Objek konfigurasi |
IViewerFactory | Singleton | Memetakan ekstensi ke penampil format |
IDocumentSessionManager | Singleton | Token → cache sesi (IMemoryCache juga terdaftar) |
IDoconutLicenseService | Singleton | Lisensi dimuat sekali saat startup (prioritas: LicenseStream → LicenseContent → LicensePath → pencarian otomatis) |
PageImageService | Singleton | Pipeline gambar halaman (watermark/rotate/scale/annotations) |
| Document security (access store) | Singleton | Hak akses 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 |
Health check "doconut" | — | Melaporkan status lisensi/kedaluwarsa melalui pemeriksaan kesehatan ASP.NET |
Tidak ada pemanggilan yang setara di pustaka .NET Standard sebelumnya. Ia membangun new Viewer(cache, accessor) per permintaan dan meneruskan opsi ke middleware; keduanya digantikan oleh pendaftaran tunggal ini.
Dua perilaku yang penting untuk diketahui:
- Converter memerlukan plugin-nya. Menyelesaikan
DocumentConvertertanpaoptions.AddPlugin<ConverterPlugin>()akan melempar:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Hak plugin divalidasi saat startup. Lisensi yang hilang, file
TRIALlama, atau lisensi berbayar tanpa kemampuan plugin yang terdaftar akan gagal pada waktuAddDoconut(). Pendaftaran Temporary/Demo bertahan melewati tanggal kedaluwarsa, sementara gerbang runtime mencabut kemampuan yang telah kedaluwarsa.
Pemeriksaan kesehatan terintegrasi dengan mekanisme standar ASP.NET Core — petakan jika Anda menginginkan status lisensi pada endpoint kesehatan Anda:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Menambahkan middleware gambar halaman Doconut. Ia 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 bernilai false, lapisan keamanan dokumen secara otomatis terhubung sebelum middleware ini.
Tidak menerima argumen apa pun. Mengirimkan instance DoconutOptions di sini adalah bentuk pustaka sebelumnya dan kini 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)Menyajikan JS, CSS, gambar, dan font yang tersemat di DoconutOptions.ResourcesPath (default /doconut-res). Ini adalah berkas-berkas yang dihasilkan tag oleh Viewer.ReferenceCss() / ReferenceScripts().
Selalu panggil sebelum UseDoconut(). Jika area penampil tetap kosong dan konsol browser menampilkan 404 untuk /doconut-res/..., panggilan ini hilang atau berada di tempat yang salah.
Ini adalah pengganti yang didukung untuk menghubungkan middleware sumber daya tersemat secara manual dengan app.UseMiddleware<EmbeddedResourceMiddleware>().
Serving from shared storage
Dua pendaftaran tambahan ada untuk penyebaran di mana node yang merender dokumen tidak selalu menjadi node yang menyajikan halamannya. Keduanya dibahas secara menyeluruh dalam Distributed Deployments; tanda tangannya adalah:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...) // shared backing store for widget uploadsSisi 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(); // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut(); // 2nd Doconut call (or via a MapWhen branch)Apakah halaman ini membantu?