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.

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

AddDoconut

text
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ługaCzas życiaRola
DoconutOptionsSingletonObiekt konfiguracyjny
Usługa pamięci podręcznej sesjiSingletonToken → pamięć podręczna sesji (IMemoryCache jest również zarejestrowany)
IDoconutLicenseServiceSingletonLicencja ładowana raz przy uruchomieniu (priorytet: LicenseStream → LicenseContent → LicensePath → automatyczne wyszukiwanie)
Potok obrazów stronSingletonWykonuje przetwarzanie obrazów dla stron (znak wodny, obrót, skalowanie, adnotacje)
Bezpieczeństwo dokumentu (magazyn dostępu)SingletonUprawnienia do powiązania token‑sesja
ViewerTransientPubliczna fasada otwierania/zamykania
DocumentConverterTransientFasada 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 DocumentConverter bez options.AddPlugin<ConverterPlugin>() powoduje wyjątek:
text
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 TRIAL lub płatna licencja bez zarejestrowanej możliwości wtyczki powoduje niepowodzenie w czasie AddDoconut(). 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:

csharp
app.MapHealthChecks("/health");

UseDoconut

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

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

UseDoconutResources

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

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // opcja włączenia kolejki publikacji w tle
IServiceCollection AddDoconutDistributedWidgets(...)        // wspólne zaplecze przechowywania dla przesyłania widgetów

Strona odczytu jest oddzielnym middleware z pakietu Doconut.Clouds:

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

UseDoconutWebFarm(...) i WebFarmOptions nie istnieją w tej wersji. Zobacz przewodnik migracji po mapowanie ustawień krok po kroku.

Ordering recap

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