Eklenti Sistemi
Görünümü eklentilerle genişletin
Doconut'un çekirdeği hafif kalır; isteğe bağlı işlevsellik plugins olarak gelir — ayrı NuGet paketleri görüntüleyiciler veya hizmetler sağlar 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.
Bu model bu sürümde yenidir. Önceki .NET Standard kütüphanesinde eklenti kaydı yoktu: dönüşüm doğrudan görüntüleyicide gerçekleşir ve eklenti lisansları statik Viewer.SetLicensePlugin(...) çağrılarıyla kurulurdu. Burada hiçbiri bir kayıt mekanizması değildir.
Bir eklenti kaydetme
Her eklenti paketi bir eklenti sınıfı ortaya çıkarır. Bunu bir kez, başlangıçta kaydedersiniz:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddPlugin<TPlugin>() eklentiyi örnekler ve DoconutOptions üzerinde tutulan eklenti kaydına karşı Register geri çağrısını yürütür. Her bir eklenti katkısı, eklentinin required capability ile etiketlenir. AddDoconut() kayıtlı eklentileri hemen doğrular: eksik bir lisans, eski TRIAL dosyası veya yetenek olmadan ücretli lisans, başlangıcı InvalidOperationException ile başarısız kılar.
Sözleşme
Bir eklenti kasıtlı olarak küçük bir arayüz uygular:
public interface IDoconutPlugin
{
string Name { get; } // örn. "Doconut DICOM Viewer"
LicenseCapability RequiredCapability { get; } // lisans geçidi
void Register(IDoconutPluginBuilder builder); // görüntüleyicileri/hizmetleri katkıda bulun
}Register içinde, oluşturucu iki tür katkıyı kabul eder:
builder.RegisterViewer(extension, factory)— bir dosya uzantısı için görüntüleyici; fabrika birIFormatViewerdöndürür (DICOM eklentisi bu şekilde.dcmve.imakaydeder),builder.RegisterService<TContract>(() => …)— boru hattının diğer bölümleri tarafından aranabilen tiplenmiş bir 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 sunulur.
Başlangıç doğrulaması normalde lisanssız bir eklentinin istek borusuna girmesini engeller. Görüntüleyici fabrikası ayrıca iki savunma çalışma zamanı kuralı uygular; bunlar, hakların başlangıçtan sonra değişmesi durumunda önemlidir:
- Eklenti yerleşik bir görüntüleyiciyi geçersiz kılar (bir eklenti, yerleşik kaydın da işlediği bir uzantıyı talep eder): yetenek lisanslıysa, eklenti görüntüleyici kazanır; lisanssızsa, 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 bir görüntüleyicisi yok): yetenek olmadan açma çağrısı sert bir şekilde başarısız olur:
LicenseException: This document type requires the 'Dicom' plugin license.Aktif bir Temporary lisans her yetkinliği verir (temiz, filigran içermeyen temel görüntüleme ile). Bu, yayına geçişte klasik bir sürpriz kaynağıdır: aynı eklentileri, yeteneklerinden birini içermeyen satın alınmış bir lisansla kaydetmek, AddDoconut()'in başlangıçta başarısız olmasına yol açar. Dağıtmadan önce planınıza karşı IsCapabilityGranted(...)'i karşılaştırın. Diğer yandan: hiç lisans yoksa, hiçbir şey verilmez — eksik bir lisans bir Temporary lisans değildir.
Aynı kısıtlama istemci tarafında da görülür: Viewer.ReferenceScripts() ve ReferenceCss(), lisans‑kısıtlı özellikler (arama, açıklama, …) için script/stil paketlerini 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:
| Feature | How it is enabled | Capability | Contributes |
|---|---|---|---|
| Annotation | Görüntüleyiciye yerleşiktir; açıklama kaynaklarını içerir | Annotation | Tarayıcı oluşturma, oturum kalıcılığı ve gömülü dışa aktarmalar |
| Search | Aranabilir format görüntüleyicilere yerleşiktir; arama kaynaklarını içerir ve gerektiğinde çıkarımı etkinleştirir | Search | Yerel metin indeksi, vurgulamalar ve sonuç gezinmesi |
| Converter | Install Doconut.NETStandard.Converter and register ConverterPlugin | Converter | C# dönüşüm hizmeti ve isteğe bağlı web widget'ı |
| DICOM | Install Doconut.NETStandard.Dicom and register DicomPlugin | Dicom | Medical‑image görüntüleme için .dcm ve .ima |
Açıklama ve normal Arama AddPlugin<TPlugin>() kullanmaz; bunların paketleri yalnızca lisans ilgili yetkinliği verdiğinde üretilir. Converter ve DICOM, bu dokümantasyon seti için yayınlanan isteğe bağlı IDoconutPlugin uygulamalardır.
Onaylanmış .NET Standard artefaktları, çekirdek paketle aynı sürümde Doconut.NETStandard.Converter ve Doconut.NETStandard.Dicom içerir.
Yayınlanmış eklenti paketleri
| Plugin | Package | Capability | Contributes |
|---|---|---|---|
| Converter | Doconut.NETStandard.Converter | Converter | Belge dönüşüm yetkinliği |
| DICOM | Doconut.NETStandard.Dicom | Dicom | Medical‑image görüntüleme (.dcm — sadece eklenti formatı) |
Her birinin, Plugins altında yapılandırma ve kullanım bilgileri bulunan özel bir sayfası vardır.
Özel görüntüleyiciler — kendi format işleyiciniz
Bir eklenti paketi yazmadan, doğrudan Program.cs üzerinden bir görüntüleyiciyi boru hattına ekleyebilirsiniz:
builder.Services.AddDoconut(options =>
{
options.RegisterViewer(
".myext",
() => new MyCustomViewer(), // IFormatViewer arayüzünü uygular
() => new ImageConfig { ImageResolution = 150 }); // isteğe bağlı varsayılan yapılandırma
});Özel görüntüleyiciler her şeyin — yerleşiklerin ve eklentilerin — önüne geçer ve lisans‑kısıtlamalı değildir (koddur). Fabrika, varsayılan bir yapılandırma sağlamadığınızda bir ImageConfig'a geri döner.
Çıkarımlar
- Eklentiler açıkça kaydedilir ve
LicenseCapability'leriAddDoconut()sırasında doğrulanır — eksik veya yetersiz geçici olmayan haklar hızlıca başarısız olur. - Geçersiz kılma tarzı eklentiler nazikçe bozulur; sadece eklenti formatları bir
LicenseExceptionile başarısız olur. - Aktif bir Temporary lisans her şeyi açar; üretim lisansı satın aldıklarınızı açar. Göndermeden önce
IDoconutLicenseServiceile doğrulayın.
Bu sayfa yardımcı oldu mu?