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, jak ograniczanie licencji zachowuje się w czasie wykonywania oraz jak podłączyć własną przeglądarkę.

Rejestrowanie wtyczki

Każdy pakiet wtyczki udostępnia jedną klasę wtyczki. Rejestrujesz ją raz, przy uruchamianiu:

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

AddPlugin<TPlugin>() tworzy instancję wtyczki i wywołuje jej Register callback w rejestrze wtyczek przechowywanym na DoconutOptions. Wszystko, co wtyczka wnosi, jest oznaczone wymaganą możliwością wtyczki. AddDoconut() natychmiast waliduje zarejestrowane wtyczki: brak licencji, starszy plik TRIAL lub płatna licencja bez tej możliwości powodują niepowodzenie uruchomienia z InvalidOperationException. Rejestracja Temporary/Demo jest zachowywana po wygaśnięciu, ale jej możliwości w czasie działania są cofane po dacie wygaśnięcia.

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 akceptuje 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ą wyszukać.

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 warunkiem wstępnym, udostępnianym jako IsViewerLicensed w usłudze licencji.

Walidacja przy uruchomieniu zazwyczaj zapobiega nielicencjonowanej wtyczce przed wejściem do potoku żądań. Fabryka przeglądarek stosuje również dwie defensywne reguły w czasie działania, które mają znaczenie, jeśli uprawnienia zmieniają się po uruchomieniu:

  • Wtyczka nadpisuje wbudowaną przeglądarkę (wtyczka zgłasza rozszerzenie, które obsługuje również wbudowany rejestr): przy licencjonowanej możliwości, przeglądarka wtyczki wygrywa; bez niej, Doconut cicho przełącza się na wbudowaną przeglądarkę. Użytkownicy nadal widzą swój dokument — po prostu nie otrzymują funkcji wtyczki.
  • Format tylko wtyczkowy (np. .dcm — DICOM nie ma wbudowanej przeglądarki): bez możliwości wywołanie otwarcia kończy się twardą awarią:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Aktywna licencja Temporary przyznaje wszystkie możliwości (z czystym, nieoznaczonym podstawowym podglądem). To klasyczne źródło niespodzianek przy uruchomieniu: rejestracja tych samych wtyczek z zakupioną licencją, która pomija jedną z ich możliwości, powoduje niepowodzenie AddDoconut() podczas uruchamiania. Porównaj IsCapabilityGranted(...) ze swoim planem przed wdrożeniem. Druga strona: przy braku jakiejkolwiek licencji, nic nie jest przyznane — brak licencji nie jest licencją Temporary.

To samo ograniczanie pojawia się po stronie klienta: Viewer.ReferenceScripts() i ReferenceCss() emitują pakiety skryptów/style dla funkcji ograniczonych licencją (wyszukiwanie, adnotacje, …) tylko gdy licencja je włącza, więc interfejs widgetu pozostaje spójny z tym, co serwer faktycznie zrobi.

Mapa funkcji i wtyczek

Interfejs produktu używa terminu „wtyczka” jako szerokiej etykiety funkcji, ale rejestracja po stronie serwera różni się:

FunkcjaJak jest włączaneMożliwośćWnosi
AnnotationWbudowane w przeglądarkę; zawiera zasoby adnotacjiAnnotationTworzenie w przeglądarce, utrzymywanie sesji i eksporty wbudowane
SearchWbudowane w przeglądarki formatów przeszukiwalnych; zawiera zasoby wyszukiwania i umożliwia ekstrakcję tam, gdzie jest wymaganaSearchNatywny indeks tekstu, podświetlenia i nawigacja wyników
ConverterZainstaluj Doconut.NET8.Converter i zarejestruj ConverterPluginConverterUsługa konwersji C# i opcjonalny widget internetowy
DICOMZainstaluj Doconut.NET8.Dicom i zarejestruj DicomPluginDicomWyświetlanie obrazów medycznych dla .dcm i .ima

Adnotacje i zwykłe wyszukiwanie nie używają AddPlugin<TPlugin>(); ich pakiety są emitowane tylko wtedy, gdy licencja przyznaje odpowiednią możliwość. Konwerter i DICOM są implementacjami opt‑in IDoconutPlugin.

Udostępnione pakiety wtyczek

WtyczkaPakietMożliwośćWnosi
ConverterDoconut.NET8.ConverterConverterMożliwość konwersji dokumentów
DICOMDoconut.NET8.DicomDicomWyświetlanie obrazów medycznych (.dcm — format tylko wtyczkowy)

Każda ma dedykowaną stronę w sekcji Wtyczki z jej konfiguracją i użyciem.

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

Możesz podłączyć przeglądarkę do potoku bez pisania pakietu wtyczki, bezpośrednio z Program.cs:

csharp
builder.Services.AddDoconut(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ą (są twoim kodem). Fabryka przełącza się na ImageConfig, gdy nie dostarczysz domyślnej konfiguracji.

Wnioski

  • Wtyczki są rejestrowane explicite i ich LicenseCapability jest walidowany podczas AddDoconut() — brak lub niewystarczające uprawnienie nie‑temporary kończy się szybkim niepowodzeniem.
  • Wtyczki typu override degradują się łagodnie; formaty tylko wtyczkowe kończą się niepowodzeniem z LicenseException.
  • Aktywna licencja Temporary odblokowuje wszystko; produkcyjna odblokowuje to, co kupiłeś. Zweryfikuj z IDoconutLicenseService przed wydaniem.

Czy ta strona była pomocna?