Plugin-system
Utöka visaren med plugins
Doconuts kärna förblir slank; valfri funktionalitet levereras som plugins — separata NuGet‑paket som bidrar med visare eller tjänster och aktiveras av din licens. Denna sida förklarar registreringsmodellen, hur licensgatekeeping fungerar vid körning, och hur du ansluter din egen visare.
Registrering av en plugin
Varje plugin‑paket exponerar en plugin‑klass. Du registrerar den en gång, vid uppstart:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() instansierar pluginen och anropar dess Register‑callback mot pluginregistret som hålls i DoconutOptions. Allt som en plugin bidrar med märks med pluginens required capability. AddDoconut() validerar registrerade plugins omedelbart: en saknad licens, gammal TRIAL‑fil eller betald licens utan kapaciteten får uppstarten att misslyckas med InvalidOperationException. En Temporary/Demo‑registrering behålls efter utgången, men dess körningskapaciteter återkallas efter utgångsdatumet.
Kontraktet
En plugin implementerar ett avsiktligt litet gränssnitt:
public interface IDoconutPlugin
{
string Name { get; } // e.g. "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // the license gate
void Register(IDoconutPluginBuilder builder); // contribute viewers/services
}Inuti Register accepterar byggaren två typer av bidrag:
builder.RegisterViewer(".dcm", () => new DicomViewer())— en visare för en filändelse,builder.RegisterService<TContract>(() => …)— en typad tjänst som andra delar av pipelinen kan slå upp.
Kapaciteter och gatekeeping
Kapaciteter är licensenheterna. Converter och Dicom levereras som valfria plugins; Search och Annotation är inbyggda funktioner som gateas på samma sätt. Basvisaren är inte en kapacitet — den är förutsättningen, exponerad som IsViewerLicensed i licenstjänsten.
Uppstartsvalidering förhindrar normalt en olicensierad plugin från att komma in i begäranpipen. Visarfabriken tillämpar också två defensiva körningsregler, som är viktiga om rättigheten förändras efter uppstart:
- Plugin åsidosätter en inbyggd visare (en plugin påstår en filändelse som den inbyggda registret också hanterar): med den licensierade kapaciteten vinner plugin‑visaren; utan den faller Doconut tyst tillbaka till den inbyggda visaren. Användarna ser fortfarande sitt dokument — de får bara inte plugin‑funktionen.
- Endast plugin‑format (t.ex.
.dcm— DICOM har ingen inbyggd visare): utan kapaciteten misslyckas öppningsanropet hårt:
LicenseException: This document type requires the 'Dicom' plugin license.En aktiv Temporary‑licens beviljar alla kapaciteter (med ren, o‑vattenmärkt basvisning). Detta är en klassisk källa till överraskningar vid driftstart: att registrera samma plugins med en köpt licens som utelämnar en av deras kapaciteter får AddDoconut() att misslyckas under uppstart. Jämför IsCapabilityGranted(...) med din plan innan du distribuerar. Motsatsen: med ingen licens alls beviljas inget — en saknad licens är inte en Temporary‑licens.
Samma gatekeeping visas på klientsidan: Viewer.ReferenceScripts() och ReferenceCss() genererar skript-/stilmallar för de licensgateade funktionerna (sök, annotation, …) endast när licensen aktiverar dem, så widgetens UI förblir konsekvent med vad servern faktiskt gör.
Funktion- och plugin‑karta
Produktens UI använder “plugin” som en bred funktionsetikett, men serverregistreringen skiljer sig:
| Funktion | Hur den aktiveras | Kapacitet | Bidrar med |
|---|---|---|---|
| Annotation | Inbyggd i visaren; inkluderar annoteringsresurser | Annotation | Webbläsarredigering, sessionsbeständighet och inbrända exporteringar |
| Search | Inbyggd i sökbara formatvisare; inkluderar sökresurser och möjliggör extraktion där det krävs | Search | Inbyggt textindex, markeringar och resultatsökning |
| Converter | Installera Doconut.NET6.Converter och registrera ConverterPlugin | Converter | C#‑konverteringstjänst och valfri webbwidget |
| DICOM | Installera Doconut.NET6.Dicom och registrera DicomPlugin | Dicom | Visning av medicinska bilder för .dcm och .ima |
Annotation och vanlig Search använder inte AddPlugin<TPlugin>(); deras paket genereras endast när licensen beviljar motsvarande kapacitet. Converter och DICOM är de släppta valfria IDoconutPlugin‑implementationerna för detta dokumentationspaket.
De godkända .NET 6‑artefakterna innehåller Doconut.NET6.Converter och Doconut.NET6.Dicom i samma version som kärnpaketet.
Släppta plugin‑paket
| Plugin | Paket | Kapacitet | Bidrar med |
|---|---|---|---|
| Converter | Doconut.NET6.Converter | Converter | Dokumentkonverteringskapacitet |
| DICOM | Doconut.NET6.Dicom | Dicom | Visning av medicinska bilder (.dcm — endast plugin‑format) |
Var och en har en dedikerad sida under Plugins med sin konfiguration och användning.
Anpassade visare — din egen format‑hanterare
Du kan ansluta en visare till pipelinen utan att skriva ett plugin‑paket, direkt från Program.cs:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // implements IFormatViewer
() => new ImageConfig { ImageResolution = 150 }); // optional default config
});Anpassade visare har företräde framför allt — både inbyggda och plugins — och är inte licensgateade (de är din kod). Fabriken faller tillbaka till en ImageConfig när du inte tillhandahåller en standardkonfiguration.
Slutsatser
- Plugins registreras explicit och deras
LicenseCapabilityvalideras underAddDoconut()— saknad eller otillräcklig icke‑tillfällig rättighet misslyckas snabbt. - Override‑stil plugins degraderas elegant; endast plugin‑format misslyckas med ett
LicenseException. - En aktiv Temporary‑licens låser upp allt; produktion låser upp det du har köpt. Verifiera med
IDoconutLicenseServiceinnan du levererar.
Var den här sidan till hjälp?