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:
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:
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:
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 (
.dcmi.ima— DICOM nie ma wbudowanej przeglądarki): bez możliwości otwarcie nie powodzi się:
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
| Funkcja | Jak jest włączona | Możliwość | Wkład |
|---|---|---|---|
| Adnotacja | Wbudowane w przeglądarkę; zawiera zasoby adnotacji | Annotation | Tworzenie w przeglądarce, utrzymywanie sesji, eksporty wtopione |
| Wyszukiwanie | Wbudowane w przeglądarki obsługujące formaty przeszukiwalne; zawiera zasoby wyszukiwania | Search | Wbudowany indeks tekstu, podświetlenia, nawigacja wyników |
| Konwerter | Zainstaluj Doconut.NETFramework.Converter i zarejestruj ConverterPlugin | Converter | Usługa konwersji C# i opcjonalny widget internetowy |
| DICOM | Zainstaluj Doconut.NETFramework.Dicom i zarejestruj DicomPlugin | Dicom | Wyś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:
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 pustym500, 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
IDoconutLicenseServiceprzed wypuszczeniem.
Czy ta strona była pomocna?