DoconutOptions

Configura i servizi Doconut

DoconutOptions (namespace Doconut) è l'oggetto di configurazione unico per l'intero SDK. Lo configuri una volta, all'interno di AddDoconut(), ed è registrato come singleton.

Questo è un cambiamento di posizione tanto quanto di forma. Nella precedente libreria .NET Standard un'istanza DoconutOptions veniva costruita al momento del pipeline e passata a UseDoconut(new DoconutOptions { … }). Qui il middleware non accetta opzioni — tutto è impostato durante la registrazione del servizio.

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

Proprietà

TipoProprietàPredefinitoDescrizione
boolShowDoconutInfofalseQuando true, una richiesta middleware senza token restituisce un banner di versione invece di 404. Utile come verifica rapida; lascia false in produzione.
boolUnsafeModefalseQuando true, salta il controllo di sicurezza della sessione ASP.NET nelle richieste di pagina. Lascia false in produzione su un singolo nodo (vedi Core Concepts → Sessions & Security). Precedentemente scritto UnSafeMode.
stringMiddlewarePath"/doconut"Valore di coordinazione per l'endpoint page-image. Viene validato, ma non monta un ramo del pipeline; mantienilo allineato con la mappatura reale UseDoconut() e il client BasePath.
stringResourcesPath"/doconut-res"Prefisso del percorso URL per le risorse JS/CSS/immagine/font incorporate.
stringLicensePath""Percorso al file di licenza. Vuoto → sorgente di licenza successiva, poi auto-scoperta; se non trovato → stato di valutazione con filigrana senza funzionalità.
stringLicenseContent""Contenuto XML grezzo della licenza (database, variabile d'ambiente, secret manager). Ha precedenza su LicensePath.
Stream?LicenseStreamnullLicenza come stream, letta una volta all'avvio. Ha precedenza su entrambe le altre fonti.
boolResetLicensefalseFlag di compatibilità riservata. L'implementazione attuale non la utilizza; riavvia l'applicazione dopo aver sostituito una licenza.
DoconutPluginRegistryPluginRegistry—Registro di sola lettura che raccoglie i contributi dei plugin; consumato dalla factory del visualizzatore. Popola tramite AddPlugin<T>().

Priorità della licenza (applicata durante la registrazione del servizio): LicenseStream → LicenseContent → LicensePath → scoperta automatica (vedi Getting Started → License Setup).

Metodi

AddPlugin<TPlugin>()

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

Usa questo metodo per i pacchetti Converter e DICOM opt-in rilasciati. L'annotazione e la ricerca normale sono funzionalità con licenza integrate e non utilizzano AddPlugin<TPlugin>().

Registra un plugin di prima parte (Converter, DICOM). Fluent — restituisce l'istanza delle opzioni. AddDoconut() lancia InvalidOperationException per una licenza mancante, file legacy TRIAL, o licenza a pagamento che non concede la capacità del plugin. Le registrazioni temporanee/Demo sono mantenute oltre la scadenza e diventano soggette al gate di runtime (vedi Core Concepts → Plugin System).

Il widget Converter opt-in è abilitato con AddConverterWidget() e reso disponibile tramite la proprietà di sola lettura ConverterWidget; le sue opzioni sono documentate nella pagina Converter Plugin (Plugins → Converter Plugin).

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — punto iniziale opzionale
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

Registra un visualizzatore personalizzato per un'estensione di file. I visualizzatori personalizzati hanno precedenza su quelli integrati e sui visualizzatori dei plugin e non sono soggetti a licenza. Quando defaultConfig è omesso e un documento si apre senza una configurazione esplicita, viene usato un ImageConfig.

Lancia ArgumentException (Extension must be a non-empty file extension.) per un'estensione vuota e ArgumentNullException per una factory nulla.

Convalida all'avvio

AddDoconut() valida le opzioni fail-fast, così una cattiva configurazione si manifesta come un'eccezione chiara all'avvio invece di 404 confusi al momento della richiesta:

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.

Configurazioni comuni

csharp
// Produzione: licenza esplicita, tutto bloccato (tutte le impostazioni di sicurezza predefinite)
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});

// Percorsi personalizzati (e.g. per evitare un conflitto di percorso)
builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});

Quando cambi ResourcesPath, mantieni sincronizzato il ResPath del widget client (vedi ViewerConfig). Questa è una delle due impostazioni client-side che falliscono senza un messaggio di errore.

MiddlewarePath non è un mapper di route automatico per ASP.NET Core. Se Doconut deve rispondere solo sotto un prefisso personalizzato, monta UseDoconut() su quel ramo (ad esempio con app.Map("/docs-engine", branch => branch.UseDoconut())) e imposta il client BasePath sulla stessa URL. L'applicazione di riferimento invece mantiene la forma storica della richiesta DocImage.axd su un ramo MapWhen con BasePath: '/'.

Questa pagina è stata utile?