Eklenti Sistemi

Görüntüleyiciyi eklentilerle genişletin

Doconut'un çekirdeği hafif kalır; isteğe bağlı işlevsellik eklentiler olarak sunulur — izleyiciler veya hizmetler sağlayan ayrı NuGet paketleri ve lisansınız tarafından etkinleştirilir. Bu sayfa kayıt modelini, lisans kısıtlamasının çalışma zamanında nasıl davrandığını ve kendi görüntüleyicinizi nasıl ekleyeceğinizi açıklar.

Bir eklenti kaydetme

Her eklenti paketi bir eklenti sınıfı ortaya çıkarır. Bunu bir kez, başlangıçta kaydedersiniz:

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

AddPlugin<TPlugin>() eklentiyi örnekler ve DoconutOptions içinde tutulan eklenti kayıt defterine karşı Register geri çağrısını yürütür. Bir eklentinin katkısı olan her şey eklentinin gerekli yeteneği ile etiketlenir. AddDoconut() kayıtlı eklentileri hemen doğrular: eksik bir lisans, eski TRIAL dosyası veya yeteneği olmayan ücretli bir lisans, başlangıcı InvalidOperationException ile başarısız kılar. Bir Temporary/Demo kaydı süresi dolana kadar tutulur, ancak çalışma zamanı yetenekleri son tarih geçtikten sonra iptal edilir.

Sözleşme

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

text
public interface IDoconutPlugin
{
    string Name { get; }                          // e.g. "Doconut DICOM Viewer"
    LicenseCapability RequiredCapability { get; } // the license gate
    void Register(IDoconutPluginBuilder builder); // contribute viewers/services
}

Register içinde, builder 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 bulabileceği tiplenmiş bir hizmet.

Yetkinlikler ve kısıtlama

Yetkinlikler lisans birimleridir. Converter ve Dicom isteğe bağlı eklentiler olarak sunulur; 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ı genellikle lisanssız bir eklentinin istek borusuna girmesini engeller. Görüntüleyici fabrikası ayrıca iki savunma çalışma zamanı kuralı uygular; bunlar, yetki başlangıçtan sonra değişirse önemlidir:

  • Eklenti yerleşik bir görüntüleyiciyi geçersiz kılar (bir eklenti, yerleşik kayıt defterinin de işlediği bir uzantıyı talep eder): yetkinlik lisanslıysa, eklenti görüntüleyicisi kazanır; lisans yoksa, Doconut sessizce yerleşik görüntüleyiciye geri döner. Kullanıcılar hâlâ belgelerini görür — sadece eklenti özelliğini almazlar.
  • Sadece eklenti formatı (ör. .dcm — DICOM'un yerleşik görüntüleyicisi yok): yetkinlik olmadan açma çağrısı sert bir şekilde başarısız olur:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Etkin bir Temporary lisansı tüm yetkinlikleri verir (temiz, filigran olmayan temel görüntüleme ile). Bu, yayına geçişte klasik bir sürpriz kaynağıdır: aynı eklentileri, yetkinliklerinden birini içermeyen satın alınmış bir lisansla kaydetmek AddDoconut()'ın başlangıçta başarısız olmasına neden olur. Dağıtımdan önce planınıza karşı IsCapabilityGranted(...)'ı karşılaştırın. Diğer yandan: hiç lisans yoksa, hiçbir şey verilmez — eksik bir lisans Temporary lisans değildir.

Aynı kısıtlama istemci tarafında da görülür: Viewer.ReferenceScripts() ve ReferenceCss() lisans kısıtlamalı özellikler (arama, açıklama, …) yalnızca lisans etkinleştirdiğinde üretir, böylece widget'ın UI'si sunucunun gerçekte yapacaklarıyla tutarlı kalır.

Özellik ve eklenti haritası

Ürün UI'si “plugin” terimini geniş bir özellik etiketi olarak kullanır, ancak sunucu kaydı farklıdır:

ÖzellikNasıl etkinleştirilirYetkinlikKatkılar
AnnotationGörüntüleyiciye yerleşiktir; açıklama kaynaklarını içerirAnnotationTarayıcı oluşturma, oturum kalıcılığı ve gömülü dışa aktarmalar
SearchAranabilir format görüntüleyicilerine yerleşiktir; arama kaynaklarını içerir ve gerektiğinde çıkarımı etkinleştirirSearchYerel metin indeksi, vurgulamalar ve sonuç gezinmesi
ConverterDoconut.NET8.Converter'ı kurun ve ConverterPlugin'i kaydedinConverterC# dönüşüm hizmeti ve isteğe bağlı web widget'ı
DICOMDoconut.NET8.Dicom'ı kurun ve DicomPlugin'i kaydedinDicom.dcm ve .ima için tıbbi görüntü izleme

Yayınlanan eklenti paketleri

EklentiPaketYetkinlikKatkılar
ConverterDoconut.NET8.ConverterConverterBelge dönüşüm yeteneği
DICOMDoconut.NET8.DicomDicomTıbbi görüntü izleme (.dcm — sadece eklenti formatı)

Her biri, Plugins altında yapılandırma ve kullanım bilgileriyle ayrı bir sayfaya sahiptir.

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

Bir eklenti paketi yazmadan, doğrudan Program.cs'den bir görüntüleyiciyi boru hattına ekleyebilirsiniz:

text
builder.Services.AddDoconut(options =>
{
    options.RegisterViewer(
        ".myext",
        () => new MyCustomViewer(),               // implements IFormatViewer
        () => new ImageConfig { ImageResolution = 150 }); // optional default config
});

Özel görüntüleyiciler her şeyin — yerleşiklerin ve eklentilerin — önceliğini alır ve lisans kısıtlamasına tabi değildir (kodunuzdur). Fabrika, varsayılan bir yapılandırma sağlamadığınızda ImageConfig'e geri döner.

Çıkarımlar

  • Eklentiler açıkça kaydedilir ve LicenseCapability'leri AddDoconut() sırasında doğrulanır — eksik veya yetersiz geçici olmayan yetki hızlı bir şekilde başarısız olur.
  • Geçersiz kılma tarzı eklentiler zarif bir şekilde gerileşir; sadece eklenti formatları LicenseException ile başarısız olur.
  • Etkin bir Temporary lisansı her şeyi açar; üretim ortamı satın aldıklarınızı açar. Gönderimden önce IDoconutLicenseService ile doğrulayın.

Bu sayfa yardımcı oldu mu?