DoconutOptions

Configure the Doconut services

DoconutOptions (namespace Doconut) jest jedynym obiektem konfiguracyjnym dla całego SDK. Konfigurujesz go raz, wewnątrz AddDoconut(), i jest rejestrowany jako singleton.

Jest to zmiana zarówno lokalizacji, jak i kształtu. W poprzedniej bibliotece .NET Standard instancja DoconutOptions była tworzona w czasie potoku i przekazywana do UseDoconut(new DoconutOptions { … }). Tutaj middleware nie przyjmuje żadnych opcji — wszystko jest ustawiane podczas rejestracji usług.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath     = "Doconut.Viewer.lic";
    options.UnsafeMode      = false;
    options.ShowDoconutInfo = false;
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

Właściwości

TypWłaściwośćDomyślneOpis
boolShowDoconutInfofalseGdy true, żądanie middleware bez tokenu zwraca baner wersji zamiast 404. Przydatne jako szybka kontrola; w produkcji pozostaw false.
boolUnsafeModefalseGdy true, pomija kontrolę bezpieczeństwa sesji ASP.NET przy żądaniach stron. W produkcji pozostaw false na pojedynczym węźle (zobacz Core Concepts → Sessions & Security). Wcześniej zapisane jako UnSafeMode.
stringMiddlewarePath"/doconut"Wartość koordynująca dla punktu końcowego obrazu strony. Jest walidowana, ale nie montuje gałęzi potoku; utrzymuj ją zgodną z rzeczywistym mapowaniem UseDoconut() i BasePath klienta.
stringResourcesPath"/doconut-res"Prefiks ścieżki URL dla osadzonych zasobów JS/CSS/obraz/font.
stringLicensePath""Ścieżka do pliku licencji. Pusta → kolejny źródło licencji, potem automatyczne wykrycie; nic nie znaleziono → stan oceny z znakami wodnymi bez możliwości.
stringLicenseContent""Surowa zawartość licencji XML (baza danych, zmienna środowiskowa, manager sekretów). Ma pierwszeństwo przed LicensePath.
Stream?LicenseStreamnullLicencja jako strumień, odczytywana raz przy starcie. Ma pierwszeństwo przed oboma innymi źródłami.
boolResetLicensefalseZarezerwowany znacznik kompatybilności. Aktualna implementacja go nie wykorzystuje; po zamianie licencji uruchom aplikację ponownie.
DoconutPluginRegistryPluginRegistryRejestr tylko do odczytu zbierający wkłady wtyczek; używany przez fabrykę przeglądarki. Wypełnij poprzez AddPlugin<T>().

Priorytet licencji (wyegzekwowany przy rejestracji usług): LicenseStreamLicenseContentLicensePath → automatyczne wykrycie (zobacz Getting Started → License Setup).

Metody

AddPlugin<TPlugin>()

text
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()

Użyj tej metody dla wydanych pakietów Converter i DICOM dostępnych na zasadzie opt‑in. Anotacja i normalne wyszukiwanie są wbudowanymi funkcjami licencjonowanymi i nie korzystają z AddPlugin<TPlugin>().

Rejestruje wtyczkę pierwszej strony (Converter, DICOM). Fluent — zwraca instancję opcji. AddDoconut() rzuca InvalidOperationException przy brakującej licencji, starszym pliku TRIAL lub płatnej licencji, która nie przyznaje możliwości wtyczki. Rejestracje tymczasowe/Demo są zachowywane po wygaśnięciu i podlegają bramce czasu wykonania (zobacz Core Concepts → Plugin System).

Widżet Converter w trybie opt‑in jest włączany za pomocą AddConverterWidget() i udostępniany przez właściwość tylko do odczytu ConverterWidget; jego opcje są opisane na stronie wtyczki Converter (Plugins → Converter Plugin).

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — leading dot optional
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

Rejestruje niestandardową przeglądarkę dla rozszerzenia pliku. Niestandardowe przeglądarki mają pierwszeństwo przed wbudowanymi i przeglądarkami wtyczek oraz nie są ograniczone licencją. Gdy defaultConfig jest pominięte i dokument otwiera się bez wyraźnej konfiguracji, używany jest ImageConfig.

Rzuca ArgumentException (Extension must be a non-empty file extension.) przy pustym rozszerzeniu oraz ArgumentNullException przy nullowym fabryce.

Walidacja przy uruchamianiu

AddDoconut() waliduje opcje fail‑fast, więc niepoprawna konfiguracja objawia się wyraźnym wyjątkiem przy starcie zamiast mylących 404 w czasie żądania:

text
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.

Typowe konfiguracje

csharp
// Production: explicit license, everything locked down (all security defaults)
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});

// Custom paths (e.g. to avoid a route conflict)
builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});

Kiedy zmieniasz ResourcesPath, utrzymuj ResPath widżetu klienta w synchronizacji (zobacz ViewerConfig). To jedno z dwóch ustawień po stronie klienta, które powodują awarię bez komunikatu o błędzie.

MiddlewarePath nie jest automatycznym mapowaniem trasy ASP.NET Core. Jeśli Doconut ma odpowiadać tylko pod niestandardowym prefiksem, zamontuj UseDoconut() na tej gałęzi (np. app.Map("/docs-engine", branch => branch.UseDoconut())) i ustaw BasePath klienta na ten sam URL. Aplikacja referencyjna zamiast tego utrzymuje historyczną formę żądania DocImage.axd na gałęzi MapWhen z BasePath: '/'.

Czy ta strona była pomocna?