Eklenti Sistemi

Görünümü eklentilerle genişletin

Doconut'un çekirdeği hafif kalır; isteğe bağlı işlevsellik eklentiler olarak gönderilir — izleyiciler veya hizmetler sağlayan ayrı NuGet paketleri ve lisansınız tarafından etkinleştirilir. Bu sayfa kayıt modelini, bir lisans bir eklentiyi kapsamadığında başlangıçta ne olduğunu ve kendi görüntüleyicinizi nasıl ekleyeceğinizi açıklar.

Bir eklentiyi kaydetme

Her eklenti paketi bir eklenti sınıfı ortaya çıkarır. Bunu bir kez, Application_Start içinde kaydedin:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});
// Lisansı eksik olan kayıtlı bir eklenti burada, Application_Start içinde fırlatır ve
// site daha sonra her isteğe boş bir 500 yanıtı verir. Sebep Windows olay günlüğünde.

AddPlugin<TPlugin>() eklentiyi oluşturur ve katkılarını DoconutOptions ile kaydetmesine izin verir. Bir eklentinin katkısı, eklentinin gerekli yeteneği ile etiketlenir ve DoconutHost.Initialize, sitenin ilk isteğini hizmet vermeden önce her kayıtlı eklentiyi lisansa karşı kontrol eder.

Eksik bir eklenti lisansı siteyi durdurur

Aktif bir lisans bir kayıtlı eklentinin yeteneğini vermediğinde — hiç lisans yoksa, eski bir TRIAL dosyasıysa veya o yeteneği içermeyen bir ücretli lisanssa — DoconutHost.Initialize, Application_Start üzerinden InvalidOperationException fırlatır:

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.

System.Web içinde, Application_Start'deki bir istisna bir hata sayfası üretmez. Her istek boş bir 500 yanıt verir, IIS günlüğü yararlı bir şey göstermez ve mesaj yalnızca Windows olay günlüğünde (Uygulama günlüğü, kaynak ASP.NET) görünür. Bir site, bir AddPlugin satırı eklendikten hemen sonra yanıt vermeyi durdurursa, önce wwwroot içindeki lisans dosyalarını kontrol edin — bkz. Lisans Kurulumu.

Sözleşme

Bir eklenti kasıtlı olarak küçük bir arayüz uygular:

csharp
public interface IDoconutPlugin
{
    string Name { get; }                          // örn. "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // lisans kapısı
    void Register(IDoconutPluginBuilder builder); // görünücüler/hizmetler katkıda bulun
}

Register içinde, oluşturucu iki tür katkıyı kabul eder:

  • builder.RegisterViewer(".dcm", () => new DicomViewer()) — bir dosya uzantısı için görüntüleyici,
  • builder.RegisterService<TContract>(() => …) — boru hattının diğer bölümlerinin arayabileceği tiplenmiş hizmet.

Yetkinlikler ve kısıtlama

Yetkinlikler lisans birimleridir. Converter ve Dicom isteğe bağlı eklentiler olarak gelir; Search ve Annotation aynı şekilde kısıtlanan yerleşik özelliklerdir. Temel görüntüleyici bir yetkinlik değildir — önkoşuldur ve lisans hizmetinde IsViewerLicensed olarak ortaya çıkar.

Başlangıç doğrulaması normalde lisanssız bir eklentiyi istek boru hattından dışarı tutar. Görüntüleyici fabrikası ayrıca iki savunma kuralı uygular; bu kurallar, site çalışırken haklar değişirse önem kazanır:

  • Yerleşik bir görüntüleyiciyi geçersiz kılan bir eklenti (bir uzantıyı, yerleşik bir görüntüleyicinin de işlediğini iddia eder): yetkinlik lisanslıysa, eklentinin görüntüleyicisi kazanır; lisanssızsa, Doconut yerleşik görüntüleyiciye geri döner. Kullanıcılar belgelerini hâlâ görür; sadece eklentinin davranışını almazlar.
  • Sadece eklentiye özgü bir format (.dcm ve .ima — DICOM'in yerleşik bir görüntüleyicisi yok): yetkinlik olmadan, açma başarısız olur:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Etkin bir Geçici lisans her yetkinliği verir. Bu klasik bir canlıya geçiş sürprizidir: değerlendirme sırasında çalışan aynı AddPlugin satırları, satın alınan lisans bu yetkinliklerden birini dışarı bıraktığında siteyi durdurur. Dağıtımdan önce satın aldıklarınızla IsCapabilityGranted(...) karşılaştırın. Hiç lisans yoksa, hiçbir şey verilmez — eksik bir lisans Geçici lisans değildir.

Aynı kısıtlama tarayıcıya da ulaşır: Viewer.ReferenceScripts() ve ReferenceCss(), lisans‑kısıtlı özelliklerin (Arama, Açıklama) dosyalarını yalnızca lisans verdiğinde gönderir, böylece sayfa sunucunun reddedeceği bir özelliği asla sunmaz.

Özellik ve eklenti haritası

ÖzellikNasıl etkinleştirilirYetkinlikKatkı sağlar
AçıklamaGörüntüleyiciye yerleşiktir; açıklama kaynaklarını içerirAnnotationTarayıcı oluşturma, oturum kalıcılığı, gömülü dışa aktarmalar
AramaAranabilir format görüntüleyicilerine yerleşiktir; arama kaynaklarını içerirSearchYerel metin indeksi, vurgulamalar, sonuç navigasyonu
DönüştürücüDoconut.NETFramework.Converter kurun ve ConverterPlugin kaydedinConverterC# dönüşüm hizmeti ve isteğe bağlı bir web widget'ı
DICOMDoconut.NETFramework.Dicom kurun ve DicomPlugin kaydedinDicom.dcm ve .ima için tıbbi görüntü izleme

Açıklama ve Arama AddPlugin<TPlugin>() kullanmaz. Dönüştürücü ve DICOM, Eklentiler altında kendi yapılandırma ve kullanım sayfalarına sahiptir. Bu pakette, DICOM sayfaları, çerçeveleri ve animasyonları render eder, ancak teknik meta verileri okumaz — bkz. DICOM Eklentisi.

Özel görüntüleyiciler — kendi format işleyiciniz

Bir eklenti paketi yazmadan, doğrudan Application_Start içinde bir görüntüleyiciyi boru hattına ekleyebilirsiniz:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),                        // IFormatViewer uygular
        () => new ImageConfig { ImageResolution = 150 });  // isteğe bağlı varsayılan yapılandırma
});

Özel görüntüleyiciler her şey üzerinde öncelik alır — yerleşikler ve eklentiler dahil — ve lisans‑kısıtlaması yoktur: bunlar sizin kodunuzdur. Varsayılan bir yapılandırma sağlamazsanız, fabrika bir ImageConfig kullanır.

Çıkarımlar

  • Eklentiler DoconutHost.Initialize içinde açıkça kaydedilir ve yetkinlikleri orada doğrulanır; eksik bir hak, siteyi boş bir 500 ile durdurur ve nedeni Windows olay günlüğündedir.
  • Geçersiz kılma tarzı eklentiler zarif bir şekilde gerileşir; sadece eklentiye özgü formatlar bir LicenseException ile başarısız olur.
  • Etkin bir Geçici lisans her şeyi açar; üretim ortamı satın aldıklarınızı açar. Göndermeden önce IDoconutLicenseService ile kontrol edin.

Bu sayfa yardımcı oldu mu?