Systém pluginů

Rozšíření prohlížeče pomocí pluginů

Jádro Doconut zůstává štíhlé; volitelná funkčnost je dodávána jako pluginy — samostatné balíčky NuGet, které přispívají prohlížeči nebo službám a jsou aktivovány vaší licencí. Tato stránka vysvětluje registrační model, jak se řízení licencí chová za běhu, a jak připojit vlastní prohlížeč.

Tento model je v tomto vydání nový. Předchozí knihovna .NET Standard neměla registr pluginů: konverze byla součástí samotného prohlížeče a licence pluginů byly instalovány pomocí statických volání Viewer.SetLicensePlugin(...). Ani jedno není zde registračním mechanismem.

Registrace pluginu

Každý balíček pluginu vystavuje jednu třídu pluginu. Zaregistrujete ji jednou, při spuštění:

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

AddPlugin<TPlugin>() vytvoří instanci pluginu a zavolá jeho Register zpětné volání proti registru pluginů drženému na DoconutOptions. Všechno, co plugin přispívá, je označeno požadovanou schopností pluginu. AddDoconut() okamžitě ověřuje registrované pluginy: chybějící licence, starý soubor TRIAL nebo placená licence bez této schopnosti způsobí selhání spuštění s InvalidOperationException. Registrace Temporary/Demo je zachována po vypršení, ale její runtime schopnosti jsou po datu vypršení odebrány.

Smlouva

Plugin implementuje záměrně malý rozhraní:

csharp
public interface IDoconutPlugin
{
    string Name { get; }                          // např. "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // licenční brána
    void Register(IDoconutPluginBuilder builder); // přispívat k prohlížečům/službám
}

Uvnitř Register builder přijímá dva typy příspěvků:

  • builder.RegisterViewer(".dcm", () => new DicomViewer()) — prohlížeč pro příponu souboru,
  • builder.RegisterService<TContract>(() => …) — typová služba, kterou mohou ostatní části pipeline vyhledat.

Schopnosti a řízení

Schopnosti jsou jednotky licence. Converter a Dicom jsou dodávány jako volitelné pluginy; Search a Annotation jsou vestavěné funkce řízené stejným způsobem. Základní prohlížeč není schopnost — je předpokladem, vystaveným jako IsViewerLicensed v licenční službě.

Ověření při spuštění normálně zabraňuje nelicencovanému pluginu vstoupit do požadavkové pipeline. Továrna prohlížečů také uplatňuje dvě obranné runtime pravidla, která jsou důležitá, pokud se oprávnění po spuštění změní:

  • Plugin přepisuje vestavěný prohlížeč (plugin si nárokuje příponu, kterou také obsluhuje vestavěný registr): pokud je schopnost licencována, pluginový prohlížeč vyhrává; pokud ne, Doconut tiše přepne na vestavěný prohlížeč. Uživatelé stále vidí svůj dokument — jen nedostanou funkci pluginu.
  • Formát pouze pro plugin (např. .dcm — DICOM nemá vestavěný prohlížeč): bez schopnosti volání open selže tvrdě:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Aktivní dočasná licence poskytuje všechny schopnosti (s čistým, neoznačeným základním prohlížením). To je klasický zdroj překvapení při nasazení: registrace stejných pluginů s zakoupenou licencí, která vynechává jednu z jejich schopností, způsobí selhání AddDoconut() během spuštění. Porovnejte IsCapabilityGranted(...) se svým plánem před nasazením. Na druhou stranu: s žádnou licencí vůbec, nic není poskytnuto — chybějící licence není dočasná licence.

Stejné řízení se objevuje na straně klienta: Viewer.ReferenceScripts() a ReferenceCss() generují balíčky skriptů/stylů pro funkce řízené licencí (vyhledávání, anotace, …) pouze když licence je povolí, takže UI widgetu zůstává v souladu s tím, co server skutečně udělá.

Mapa funkcí a pluginů

Uživatelské rozhraní produktu používá „plugin“ jako široký štítek funkce, ale registrace na serveru se liší:

FunkceJak je povolenoSchopnostPřispívá
AnotaceVestavěno v prohlížeči; zahrnuje zdroje anotacíAnnotationAutorování v prohlížeči, perzistence relace a exporty s vloženou anotací
VyhledáváníVestavěno v prohlížečích podporujících vyhledávatelné formáty; zahrnuje zdroje vyhledávání a umožňuje extrakci tam, kde je vyžadovánaSearchNativní textový index, zvýraznění a navigace ve výsledcích
KonvertorNainstalujte Doconut.NETStandard.Converter a zaregistrujte ConverterPluginConverterC# konverzní služba a volitelný webový widget
DICOMNainstalujte Doconut.NETStandard.Dicom a zaregistrujte DicomPluginDicomProhlížení medicínských obrázků pro .dcm a .ima

Anotace a běžné vyhledávání nevyužívají AddPlugin<TPlugin>(); jejich balíčky jsou generovány pouze když licence poskytne odpovídající schopnost. Konvertor a DICOM jsou vydané volitelné implementace IDoconutPlugin pro tuto sadu dokumentace.

Schválené artefakty .NET Standard obsahují Doconut.NETStandard.Converter a Doconut.NETStandard.Dicom ve stejné verzi jako hlavní balíček.

Vydané balíčky pluginů

PluginBalíčekSchopnostPřispívá
KonvertorDoconut.NETStandard.ConverterConverterSchopnost konverze dokumentů
DICOMDoconut.NETStandard.DicomDicomProhlížení medicínských obrázků (.dcm — formát pouze pro plugin)

Každý má vlastní stránku pod Pluginy se svou konfigurací a použitím.

Vlastní prohlížeče — váš vlastní obslužný formát

Můžete připojit prohlížeč do pipeline bez psaní balíčku pluginu, přímo z Program.cs:

csharp
builder.Services.AddDoconut(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),               // implementuje IFormatViewer
        () => new ImageConfig { ImageResolution = 150 }); // volitelná výchozí konfigurace
});

Vlastní prohlížeče mají přednost před všemi — vestavěnými i pluginy — a nejsou řízeny licencí (jsou vaším kódem). Továrna se vrátí k ImageConfig, pokud neposkytnete výchozí konfiguraci.

Závěry

  • Pluginy jsou registrovány explicitně a jejich LicenseCapability je ověřováno během AddDoconut() — chybějící nebo nedostatečné ne‑dočasné oprávnění selže rychle.
  • Pluginy typu přepisování selhávají elegantně; formáty pouze pro plugin selžou s LicenseException.
  • Aktivní dočasná licence odemkne vše; produkční licence odemkne to, co jste zakoupili. Ověřte pomocí IDoconutLicenseService před vydáním.

Byla tato stránka užitečná?