System wtyczek

Rozszerz przeglądarkę za pomocą wtyczek

Rdzeń Doconut pozostaje lekki; opcjonalna funkcjonalność jest dostarczana jako wtyczki — oddzielne pakiety NuGet, które dostarczają przeglądarki lub usługi i są włączane przez Twoją licencję. Ta strona wyjaśnia model rejestracji, co się dzieje przy uruchamianiu, gdy licencja nie obejmuje wtyczki, oraz jak podłączyć własną przeglądarkę.

Rejestrowanie wtyczki

Każdy pakiet wtyczki udostępnia jedną klasę wtyczki. Zarejestruj ją raz, w Application_Start:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// Zarejestrowana wtyczka, której brakuje licencji, rzuca tutaj, w Application_Start, i
// strona następnie odpowiada na każde żądanie pustym kodem 500. Powód znajduje się w dzienniku zdarzeń Windows.

AddPlugin<TPlugin>() tworzy wtyczkę i pozwala jej zarejestrować swoje wkłady w DoconutOptions. Wszystko, co wtyczka wnosi, jest oznaczone wymaganą funkcjonalnością wtyczki, a DoconutHost.Initialize sprawdza każdą zarejestrowaną wtyczkę względem licencji przed obsłużeniem pierwszego żądania przez witrynę.

Brak licencji na wtyczkę zatrzymuje witrynę

Gdy żadna aktywna licencja nie przyznaje możliwości zarejestrowanej wtyczki — brak licencji, starszy plik TRIAL lub płatna licencja bez tej możliwości — DoconutHost.Initialize rzuca 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.

W System.Web wyjątek w Application_Start nie generuje strony błędu. Każde żądanie zwraca pusty 500, dziennik IIS nie pokazuje nic przydatnego, a komunikat pojawia się tylko w dzienniku zdarzeń Windows (dziennik aplikacji, źródło ASP.NET). Gdy witryna przestaje odpowiadać zaraz po dodaniu linii AddPlugin, najpierw sprawdź pliki licencji w wwwroot — zobacz Ustawienia licencji.

Umowa

Wtyczka implementuje celowo mały interfejs:

csharp
public interface IDoconutPlugin
{
    string Name { get; }                          // np. "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // brama licencyjna
    void Register(IDoconutPluginBuilder builder); // dodaj przeglądarki/usługi
}

Wewnątrz Register, konstruktor przyjmuje dwa rodzaje wkładów:

  • builder.RegisterViewer(".dcm", () => new DicomViewer()) — przeglądarka dla rozszerzenia pliku,
  • builder.RegisterService<TContract>(() => …) — typowana usługa, którą inne części potoku mogą wyszukiwać.

Możliwości i ograniczenia

Możliwości są jednostkami licencji. Converter i Dicom są dostarczane jako wtyczki opcjonalne; Search i Annotation to wbudowane funkcje ograniczane w ten sam sposób. Podstawowa przeglądarka nie jest możliwością — jest wymogiem wstępnym, udostępnianym jako IsViewerLicensed w usłudze licencji.

Walidacja przy uruchamianiu zazwyczaj trzyma niewylicencjonowaną wtyczkę poza potokiem żądań. Fabryka przeglądarek stosuje również dwie zasady obronne, które mają znaczenie, jeśli uprawnienia zmieniają się w trakcie działania witryny:

  • Wtyczka, która nadpisuje wbudowaną przeglądarkę (twierdzi, że obsługuje rozszerzenie, które obsługuje również wbudowana przeglądarka): przy licencjonowanej możliwości przeglądarka wtyczki wygrywa; bez niej Doconut cofa się do wbudowanej przeglądarki. Użytkownicy nadal widzą swój dokument; po prostu nie otrzymują zachowania wtyczki.
  • Format tylko wtyczkowy (.dcm i .ima — DICOM nie ma wbudowanej przeglądarki): bez możliwości otwarcie nie powodzi się:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Aktywna licencja tymczasowa przyznaje wszystkie możliwości. To klasyczna niespodzianka przy uruchomieniu: te same linie AddPlugin, które działały podczas oceny, zatrzymują witrynę, gdy zakupiona licencja pomija jedną z tych możliwości. Porównaj IsCapabilityGranted(...) z tym, co kupiłeś przed wdrożeniem. Przy braku jakiejkolwiek licencji, nic nie jest przyznane — brak licencji nie jest licencją tymczasową.

To samo ograniczenie dociera do przeglądarki: Viewer.ReferenceScripts() i ReferenceCss() emitują pliki dla funkcji ograniczonych licencją (Search, Annotation) tylko wtedy, gdy licencja je przyznaje, więc strona nigdy nie oferuje funkcji, którą serwer odmówi.

Mapa funkcji i wtyczek

FunkcjaJak jest włączonaMożliwośćWkład
AdnotacjaWbudowane w przeglądarkę; zawiera zasoby adnotacjiAnnotationTworzenie w przeglądarce, utrzymywanie sesji, eksporty wtopione
WyszukiwanieWbudowane w przeglądarki obsługujące formaty przeszukiwalne; zawiera zasoby wyszukiwaniaSearchWbudowany indeks tekstu, podświetlenia, nawigacja wyników
KonwerterZainstaluj Doconut.NETFramework.Converter i zarejestruj ConverterPluginConverterUsługa konwersji C# i opcjonalny widget internetowy
DICOMZainstaluj Doconut.NETFramework.Dicom i zarejestruj DicomPluginDicomWyświetlanie obrazów medycznych dla .dcm i .ima

Adnotacja i Wyszukiwanie nie używają AddPlugin<TPlugin>(). Konwerter i DICOM mają każda swoją stronę w sekcji Wtyczki z konfiguracją i użyciem. W tym pakiecie DICOM renderuje strony, ramki i animacje, ale nie odczytuje metadanych technicznych — zobacz Wtyczka DICOM.

Niestandardowe przeglądarki — własny obsługiwacz formatu

Możesz podłączyć przeglądarkę do potoku bez tworzenia pakietu wtyczki, bezpośrednio w Application_Start:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),                        // implementuje IFormatViewer
        () => new ImageConfig { ImageResolution = 150 });  // opcjonalna domyślna konfiguracja
});

Niestandardowe przeglądarki mają pierwszeństwo przed wszystkim — zarówno wbudowanymi, jak i wtyczkami — i nie są ograniczane licencją: to Twój kod. Gdy nie podasz domyślnej konfiguracji, fabryka używa ImageConfig.

Wnioski

  • Wtyczki są rejestrowane jawnie w DoconutHost.Initialize, a ich możliwości są tam weryfikowane; brak uprawnienia zatrzymuje witrynę z pustym 500, którego przyczyna znajduje się w dzienniku zdarzeń Windows.
  • Wtyczki typu override degradują się łagodnie; formaty tylko wtyczkowe nie powiodą się z LicenseException.
  • Aktywna licencja tymczasowa odblokowuje wszystko; produkcja odblokowuje to, co kupiłeś. Sprawdź z IDoconutLicenseService przed wypuszczeniem.

Czy ta strona była pomocna?