DoconutExtensions
Rejestracja usług i middleware
DoconutExtensions (namespace Doconut.Middleware) jest statyczną klasą z trzema wywołaniami, które każdy host Doconut wykonuje: jedną rejestrację usługi i dwie rejestracje middleware.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // PRZED UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)Tworzy DoconutOptions, waliduje je w trybie fail-fast (zobacz DoconutOptions → walidacja uruchamiania) i rejestruje pełny graf usług:
| Usługa | Czas życia | Rola |
|---|---|---|
DoconutOptions | Singleton | Obiekt konfiguracyjny |
| Usługa pamięci podręcznej sesji | Singleton | Token → pamięć podręczna sesji (IMemoryCache jest również zarejestrowany) |
IDoconutLicenseService | Singleton | Licencja ładowana raz przy uruchomieniu (priorytet: LicenseStream → LicenseContent → LicensePath → automatyczne wyszukiwanie) |
| Potok obrazów stron | Singleton | Wykonuje przetwarzanie obrazów dla stron (znak wodny, obrót, skalowanie, adnotacje) |
| Bezpieczeństwo dokumentu (magazyn dostępu) | Singleton | Uprawnienia do powiązania token‑sesja |
Viewer | Transient | Publiczna fasada otwierania/zamykania |
DocumentConverter | Transient | Fasada konwersji — wymaga wtyczki Converter |
DistributedDocumentPublisher | — | Publikuje artefakty dokumentu do współdzielonego magazynu |
Health check "doconut" | — | Zgłasza stan licencji/wygaszenia poprzez kontrole zdrowia ASP.NET |
Nie ma równoważnego wywołania w poprzedniej bibliotece .NET Standard. Tworzyło new Viewer(cache, accessor) na żądanie i przekazywało opcje do middleware; oba są zastąpione tą jedną rejestracją.
Dwa zachowania warte poznania:
- Converter wymaga swojej wtyczki. Rozwiązanie
DocumentConverterbezoptions.AddPlugin<ConverterPlugin>()powoduje wyjątek:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- Uprawnienia wtyczki są walidowane przy uruchamianiu. Brak licencji, starszy plik
TRIALlub płatna licencja bez zarejestrowanej możliwości wtyczki powoduje niepowodzenie w czasieAddDoconut(). Rejestracje tymczasowe/demo przetrwają po dacie wygaśnięcia, podczas gdy bramki w czasie działania odwołują wygasłe możliwości.
Sprawdzenie stanu integruje się ze standardowym mechanizmem ASP.NET Core — zmapuj je, jeśli chcesz stan licencji w swoim punkcie końcowym zdrowia:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)Dodaje middleware Doconut do przetwarzania obrazów stron. Odpowiada na każde żądanie zawierające parametr zapytania ?token= — strony, miniatury, wyszukiwanie, adnotacje, akcje stron (pełna tabela żądań znajduje się w Core Concepts → Jak działa przeglądarka). Gdy UnsafeMode jest false, warstwa bezpieczeństwa dokumentu jest automatycznie podłączana przed nią.
Nie przyjmuje żadnych argumentów. Przekazanie tutaj instancji DoconutOptions było kształtem poprzedniej biblioteki i już nie kompiluje się.
Przykładowy kod referencyjny kieruje żądania widgetu przez gałąź ścieżki, zachowując historyczny kształt żądania:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)Serwuje osadzone pliki JS, CSS, obrazy i czcionki pod adresem DoconutOptions.ResourcesPath (domyślnie /doconut-res). Są to pliki, dla których Viewer.ReferenceCss() / ReferenceScripts() generują znaczniki.
Zawsze wywołuj to przed UseDoconut(). Jeśli obszar przeglądarki pozostaje pusty, a konsola przeglądarki pokazuje 404 dla /doconut-res/..., to wywołanie jest brakujące lub w niewłaściwym miejscu.
Jest to wspierane zastępstwo dla ręcznego podłączania middleware obsługującego zasoby osadzone.
Serving from shared storage
Dwie dodatkowe rejestracje istnieją dla wdrożeń, w których węzeł renderujący dokument niekoniecznie jest węzłem serwującym jego strony. Obie są opisane od początku do końca w Rozproszone wdrożenia; sygnatury są następujące:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // opcja włączenia kolejki publikacji w tle
IServiceCollection AddDoconutDistributedWidgets(...) // wspólne zaplecze przechowywania dla przesyłania widgetówStrona odczytu jest oddzielnym middleware z pakietu Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) i WebFarmOptions nie istnieją w tej wersji. Zobacz przewodnik migracji po mapowanie ustawień krok po kroku.
Ordering recap
app.UseRouting();
app.UseSession(); // wymagane gdy UnsafeMode = false
app.UseDoconutResources(); // pierwsze wywołanie Doconut
app.UseDoconut(); // drugie wywołanie Doconut (lub przez gałąź MapWhen)Czy ta strona była pomocna?