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 model registrace, co se děje při spuštění, když licence neobsahuje plugin, a jak připojit vlastní prohlížeč.
Registrace pluginu
Každý balíček pluginu poskytuje jednu třídu pluginu. Zaregistrujte ji jednou, v Application_Start:
Doconut.DoconutHost.Initialize(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// Registrovaný plugin, jehož licence chybí, vyvolá výjimku zde, v Application_Start, a
// web pak odpovídá na každý požadavek prázdným 500. Důvod je v protokolu událostí Windows.AddPlugin<TPlugin>() vytváří plugin a umožňuje mu zaregistrovat své příspěvky pomocí DoconutOptions. Vše, co plugin přispívá, je označeno požadovanou schopností pluginu a DoconutHost.Initialize kontroluje každý registrovaný plugin vůči licenci před tím, než server obslouží první požadavek.
Chybějící licence pluginu zastaví web
Když žádná aktivní licence nepřiděluje schopnost registrovaného pluginu — žádná licence, starý soubor TRIAL nebo placená licence bez této schopnosti — DoconutHost.Initialize vyhodí InvalidOperationException z Application_Start:
The Converter plugin is registered via AddPlugin but no active license grants Converter.
Remove the AddPlugin<...>() call or install a license (or trial/demo) that includes Converter.V System.Web výjimka v Application_Start nevytvoří chybovou stránku. Každý požadavek vrací prázdný 500, protokol IIS neukazuje nic užitečného a zpráva se objeví pouze v protokolu událostí Windows (aplikace, zdroj ASP.NET). Když web přestane reagovat těsně po přidání řádku AddPlugin, nejprve zkontrolujte licenční soubory v wwwroot — viz Nastavení licence.
Smlouva
Plugin implementuje úmyslně malý rozhraní:
public interface IDoconutPlugin
{
string Name { get; } // např. \u0022Doconut DICOM Viewer\u0022
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 licenční jednotky. 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ě drží nelicencovaný plugin mimo pipeline požadavků. Továrna na prohlížeče také uplatňuje dvě obranná pravidla, která jsou důležitá, pokud se oprávnění během běhu webu změní:
- Plugin, který přepisuje vestavěný prohlížeč (nárokuje si rozšíření, které také obsluhuje vestavěný prohlížeč): pokud je schopnost licencována, vítězí prohlížeč pluginu; bez ní se Doconut vrátí k vestavěnému prohlížeči. Uživatelé stále vidí svůj dokument; jen nedostanou chování pluginu.
- Formát jen pro plugin (
.dcma.ima— DICOM nemá vestavěný prohlížeč): bez schopnosti selže otevření:
LicenseException: This document type requires the 'Dicom' plugin license.Aktivní dočasná licence uděluje všechny schopnosti. To je klasické překvapení při nasazení: stejné řádky AddPlugin, které běžely během hodnocení, zastaví web, když zakoupená licence vynechá některou z těchto schopností. Porovnejte IsCapabilityGranted(...) s tím, co jste zakoupili před nasazením. S žádnou licencí vůbec, nic není uděleno — chybějící licence není dočasná licence.
Stejné řízení se dostane i do prohlížeče: Viewer.ReferenceScripts() a ReferenceCss() vydávají soubory pro funkce řízené licencí (Search, Annotation) pouze když licence je uděluje, takže stránka nikdy nenabízí funkci, kterou server odmítne.
Mapa funkcí a pluginů
| Funkce | Jak je povoleno | Schopnost | Přispívá |
|---|---|---|---|
| Anotace | Vestavěno v prohlížeči; zahrnout zdroje anotací | Annotation | Autorování v prohlížeči, perzistence relace, exporty s vypáleným obsahem |
| Vyhledávání | Vestavěno v prohlížečích podporujících vyhledávání; zahrnout zdroje vyhledávání | Search | Nativní textový index, zvýraznění, navigace výsledků |
| Konvertor | Nainstalujte Doconut.NETFramework.Converter a zaregistrujte ConverterPlugin | Converter | C# konverzní služba a volitelný webový widget |
| DICOM | Nainstalujte Doconut.NETFramework.Dicom a zaregistrujte DicomPlugin | Dicom | Prohlížení lékařských obrazů pro .dcm a .ima |
Anotace a Vyhledávání nepoužívají AddPlugin<TPlugin>(). Konvertor a DICOM mají každá stránku pod Pluginy se svou konfigurací a použitím. V tomto balíčku DICOM vykresluje stránky, rámečky a animace, ale nečte technická metadata — viz DICOM plugin.
Vlastní prohlížeče — váš vlastní formátový handler
Můžete připojit prohlížeč do pipeline bez psaní balíčku pluginu, přímo v Application_Start:
Doconut.DoconutHost.Initialize(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. Když neposkytnete výchozí konfiguraci, továrna použije ImageConfig.
Závěry
- Pluginy jsou registrovány explicitně v
DoconutHost.Initializea jejich schopnosti jsou tam ověřovány; chybějící oprávnění zastaví web s prázdným500, jehož důvod je v protokolu událostí Windows. - Pluginy typu override selhávají elegantně; formáty jen pro plugin selžou s
LicenseException. - Aktivní dočasná licence odemkne vše; produkční odemkne to, co jste zakoupili. Zkontrolujte pomocí
IDoconutLicenseServicepřed nasazením.
Byla tato stránka užitečná?