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í:
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í:
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ě:
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ší:
| Funkce | Jak je povoleno | Schopnost | Přispívá |
|---|---|---|---|
| Anotace | Vestavěno v prohlížeči; zahrnuje zdroje anotací | Annotation | Autorová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ána | Search | Nativní textový index, zvýraznění a navigace ve výsledcích |
| Konvertor | Nainstalujte Doconut.NETStandard.Converter a zaregistrujte ConverterPlugin | Converter | C# konverzní služba a volitelný webový widget |
| DICOM | Nainstalujte Doconut.NETStandard.Dicom a zaregistrujte DicomPlugin | Dicom | Prohlíž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ů
| Plugin | Balíček | Schopnost | Přispívá |
|---|---|---|---|
| Konvertor | Doconut.NETStandard.Converter | Converter | Schopnost konverze dokumentů |
| DICOM | Doconut.NETStandard.Dicom | Dicom | Prohlíž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:
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
LicenseCapabilityje ověřováno běhemAddDoconut()— 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í
IDoconutLicenseServicepřed vydáním.
Byla tato stránka užitečná?