Systém pluginů
Rozšiřte prohlíž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é poskytují prohlížeče nebo služby 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 žádný 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 to zde není registrační mechanismus.
Registrace pluginu
Každý balíček pluginu poskytuje 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ů umístěnému na DoconutOptions. Všechno, co plugin poskytuje, 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 požadované 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 úmyslně 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ět prohlížeče/služby
}Uvnitř Register builder přijímá dva typy příspěvků:
builder.RegisterViewer(extension, factory)— prohlížeč pro příponu souboru; továrna vracíIFormatViewer(plugin DICOM registruje.dcma.imatímto způsobem),builder.RegisterService<TContract>(() => …)— typovanou službu, 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ě.
Validace při spuštění normálně zabraňuje nelicencovanému pluginu vstoupit do pipeline požadavků. 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á; bez ní 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í otevření selže tvrdě:
LicenseException: This document type requires the 'Dicom' plugin license.Aktivní dočasná licence uděluje 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á jednu z jejich schopností vynechává, způsobí selhání AddDoconut() během spuštění. Porovnejte IsCapabilityGranted(...) se svým plánem před nasazením. Naopak: s žádnou licencí vůbec nic není uděleno — 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ě provede.
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 vypáleným vodotiskem |
| Vyhledávání | Vestavěno v prohlížečích prohledávatelných formátů; zahrnuje zdroje vyhledávání a umožňuje extrakci tam, kde je potřeba | Search | Nativní textový index, zvýraznění a navigace výsledků |
| 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 udělí 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á samostatnou stránku pod Plugins s jeho 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(), // implements 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 override selhávají elegantně; formáty pouze pro plugin selžou s
LicenseException. - Aktivní dočasná licence odemyká vše; produkční odemyká to, co jste zakoupili. Ověřte pomocí
IDoconutLicenseServicepřed vydáním.
Byla tato stránka užitečná?