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:

csharp
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:

text
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í:

csharp
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 (.dcm a .ima — DICOM nemá vestavěný prohlížeč): bez schopnosti selže otevření:
text
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ů

FunkceJak je povolenoSchopnostPřispívá
AnotaceVestavěno v prohlížeči; zahrnout zdroje anotacíAnnotationAutorová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íSearchNativní textový index, zvýraznění, navigace výsledků
KonvertorNainstalujte Doconut.NETFramework.Converter a zaregistrujte ConverterPluginConverterC# konverzní služba a volitelný webový widget
DICOMNainstalujte Doconut.NETFramework.Dicom a zaregistrujte DicomPluginDicomProhlíž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:

csharp
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.Initialize a jejich schopnosti jsou tam ověřovány; chybějící oprávnění zastaví web s prázdným 500, 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í IDoconutLicenseService před nasazením.

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