Aracılığıyla paylaş


WPF Add-Ins Genel Bakış

.NET Framework, geliştiricilerin eklenti genişletilebilirliğini destekleyen uygulamalar oluşturmak için kullanabileceği bir eklenti modeli içerir. Bu eklenti modeli, uygulama işlevselliğiyle tümleşen ve bunları genişleten eklentilerin oluşturulmasına olanak tanır. Bazı senaryolarda, uygulamaların eklentiler tarafından sağlanan kullanıcı arabirimlerini de görüntülemesi gerekir. Bu konu başlığı altında WPF'nin bu senaryoları, arkasındaki mimariyi, avantajlarını ve sınırlamalarını etkinleştirmek için .NET Framework eklenti modelini nasıl genişlettiğini gösterir.

Önkoşullar

.NET Framework eklenti modeli hakkında bilgi sahibi olunmak gerekir. Daha fazla bilgi için bkz. Eklentiler ve Genişletilebilirlik.

Add-Ins Genel Bakış

Uygulamalar, yeni işlevleri birleştirecek şekilde uygulama yeniden derleme ve yeniden dağıtmanın karmaşıklıklarını önlemek için geliştiricilerin (hem birinci taraf hem de üçüncü taraf) kendileriyle tümleşen başka uygulamalar oluşturmasına olanak sağlayan genişletilebilirlik mekanizmaları uygular. Bu tür genişletilebilirliği desteklemenin en yaygın yolu, eklentilerin ("eklentiler" ve "eklentiler" olarak da bilinir) kullanılmasıdır. Eklentilerle genişletilebilirliği kullanıma sunan gerçek dünya uygulamalarına örnek olarak şunlar verilebilir:

  • Internet Explorer eklentileri.

  • Windows Media Player eklentileri.

  • Visual Studio eklentileri.

Örneğin, Windows Media Player eklenti modeli, üçüncü taraf geliştiricilerin Windows Media Player tarafından yerel olarak desteklenmeyen medya biçimleri (DVD, MP3 gibi), ses efektleri ve dış görünümler için kod çözücüler ve kod çözücüler oluşturma gibi çeşitli yollarla Windows Media Player'ı genişleten "eklentiler" uygulamasına olanak tanır. Her eklenti modeli, tüm eklenti modellerinde ortak olan çeşitli varlıklar ve davranışlar olsa da, bir uygulamaya özgü işlevselliği kullanıma sunma amacıyla oluşturulur.

Tipik eklenti genişletilebilirlik çözümlerinin üç ana varlığı anlaşmalar, eklentilerve konak uygulamaları'dır. Sözleşmeler, eklentilerin konak uygulamalarla nasıl tümleştirılacağını iki şekilde tanımlar:

  • Eklentiler, konak uygulamaları tarafından sunulan işlevselliklerle tümleşir.

  • Ana uygulamalar, eklentilerin entegrasyonu için işlevsellik sunar.

Eklentilerin kullanılabilmesi için konak uygulamalarının bunları bulması ve çalışma zamanında yüklemesi gerekir. Sonuç olarak, eklentileri destekleyen uygulamalar aşağıdaki ek sorumluluklara sahiptir:

  • Bulma: Ana uygulamalar tarafından desteklenen sözleşmelere uygun eklentileri bulma.

  • Etkinleştirme: Eklentilerle yükleme, çalıştırma ve iletişim kurma.

  • Yalıtım: Uygulamaları eklentilerle ilgili olası güvenlik ve yürütme sorunlarından koruyan yalıtım sınırları oluşturmak için uygulama etki alanlarını veya işlemleri kullanma.

  • İletişim: Eklentilerin ve ana uygulamaların, yöntem çağrıları yaparak ve veri aktararak yalıtılmış alanlar üzerinden iletişim kurmasına izin verme.

  • Yaşam Yönetimi: Uygulama etki alanlarını ve işlemlerini temiz ve öngörülebilir bir şekilde yükleme ve kaldırma (bkz. Uygulama Etki Alanları).

  • Sürüm Yönetimi: Konak uygulamaların ve eklentilerin yeni sürümleri oluşturulduğunda iletişim kurabilmeye devam etmesini sağlamak.

Sonuç olarak, sağlam bir eklenti modeli geliştirmek kolay olmayan bir girişimdir. Bu nedenle .NET Framework, eklenti modelleri oluşturmaya yönelik bir altyapı sağlar.

Uyarı

Eklentiler hakkında daha ayrıntılı bilgi için bkz. Eklentiler ve Genişletilebilirlik.

.NET Framework Add-In Modeline Genel Bakış

System.AddIn ad alanında bulunan .NET Framework eklenti modeli, eklenti genişletilebilirliği geliştirmeyi basitleştirmek için tasarlanmış bir tür kümesi içerir. .NET Framework eklenti modelinin temel birimi, bir konak uygulamasının ve eklentinin birbirleriyle nasıl iletişim kuracaklarını tanımlayansözleşmesidir. Sözleşmenin ana bilgisayara özgü görünümü kullanılarak bir ana bilgisayar uygulamasına bir sözleşme sunulur. Benzer şekilde, sözleşmenin eklentiye özgü görünümü eklentiye sunulur. Bir bağdaştırıcısı, ana uygulama ile eklentinin sözleşmeyle ilgili görünümleri arasında iletişim sağlamak için kullanılır. Sözleşmeler, görünümler ve bağdaştırıcılar, bölümler olarak adlandırılır ve ilgili bölümler kümesi bir işlem hattı oluşturur. İşlem hatları, .NET Framework eklenti modelinin bulma, etkinleştirme, güvenlik yalıtımı, yürütme yalıtımı (hem uygulama etki alanları hem de işlemler kullanılarak), iletişim, yaşam süresi yönetimi ve sürüm oluşturma işlemlerini desteklediği temeldir.

Bu desteğin toplamı, geliştiricilerin bir konak uygulamanın işlevselliğiyle tümleşen eklentiler oluşturmasına olanak tanır. Ancak bazı senaryolarda konak uygulamalarının eklentiler tarafından sağlanan kullanıcı arabirimlerini görüntülemesi gerekir. .NET Framework'teki her sunu teknolojisinin kullanıcı arabirimlerini uygulamak için kendi modeli olduğundan, .NET Framework eklenti modeli belirli bir sunu teknolojisini desteklemez. Bunun yerine WPF, eklentiler için kullanıcı arabirimi desteğiyle .NET Framework eklenti modelini genişletir.

WPF Add-Ins

WPF, .NET Framework eklenti modeliyle birlikte, konak uygulamalarının eklentilerden kullanıcı arabirimlerini görüntülemesini gerektiren çok çeşitli senaryoları ele almanıza olanak tanır. Özellikle, bu senaryolar WPF tarafından aşağıdaki iki programlama modeliyle ele alınıyor:

  1. Eklenti,bir kullanıcı arabirimi döndürür. Eklenti, anlaşma tarafından tanımlandığı gibi bir yöntem çağrısı aracılığıyla konak uygulamaya bir kullanıcı arabirimi döndürür. Bu senaryo aşağıdaki durumlarda kullanılır:

    • Bir eklenti tarafından döndürülen bir kullanıcı arabiriminin görünümü, dinamik olarak oluşturulan raporlar gibi yalnızca çalışma zamanında var olan verilere veya koşullara bağlıdır.

    • Bir eklenti tarafından sağlanan hizmetler için kullanıcı arabirimi, eklentiyi kullanabilen konak uygulamalarının kullanıcı arabiriminden farklıdır.

    • Eklenti öncelikle konak uygulaması için bir hizmet gerçekleştirir ve kullanıcı arabirimiyle durumu konak uygulamasına bildirir.

  2. Eklenti bir kullanıcı arabirimi. Eklenti, sözleşme tarafından tanımlanan bir kullanıcı arabirimidir. Bu senaryo aşağıdaki durumlarda kullanılır:

    • Eklenti, reklam gibi görüntülenmekten başka hizmetler sağlamaz.

    • Bir eklenti tarafından sağlanan hizmetler için kullanıcı arabirimi, hesap makinesi veya renk seçici gibi bu eklentiyi kullanabilen tüm konak uygulamaları için ortaktır.

Bu senaryolar, ui nesnelerinin konak uygulama ile eklenti uygulama etki alanları arasında geçirilebileceğini gerektirir. .NET Framework eklenti modeli, uygulama etki alanları arasında iletişim kurmak için uzaktan iletişim kurmaya bağlı olduğundan, aralarında geçirilen nesnelerin uzaktan değiştirilebilir olması gerekir.

geri alınabilen nesne, aşağıdakilerden birini veya daha fazlasını kullanan bir sınıfın örneğidir:

Uyarı

uzaktan değiştirilebilir .NET Framework nesnelerinin oluşturulmasıyla ilgili daha fazla bilgi için bkz. Nesneleri Uzaktan Değiştirilebilir Yapma.

WPF kullanıcı arabirimi türleri geri alınamaz. Sorunu çözmek için WPF, .NET Framework eklenti modelini genişleterek eklentiler tarafından oluşturulan WPF kullanıcı arabiriminin konak uygulamalardan görüntülenmesini sağlar. Bu destek WPF tarafından iki tür tarafından sağlanır: INativeHandleContract arabirimi ve FrameworkElementAdapters sınıfı tarafından uygulanan iki statik yöntem: ContractToViewAdapter ve ViewToContractAdapter. Yüksek düzeyde, bu türler ve yöntemler aşağıdaki şekilde kullanılır:

  1. WPF, eklentiler tarafından sağlanan kullanıcı arabirimlerinin şekiller, denetimler, kullanıcı denetimleri, düzen panelleri ve sayfalar gibi doğrudan veya dolaylı olarak FrameworkElement'dan türeyen sınıflar olmasını gerektirir.

  2. Sözleşme, eklenti ile konak uygulama arasında bir kullanıcı arabirimi geçirileceğini bildirdiği her yerde, INativeHandleContract olarak bildirilmelidir (FrameworkElementdeğil); INativeHandleContract, yalıtım sınırları boyunca geçirilebilen eklenti kullanıcı arabiriminin değiştirilebilir bir gösterimidir.

  3. Eklentinin uygulama etki alanından dışarı çıkarılmadan önce, bir FrameworkElement, INativeHandleContractçağrılarak ViewToContractAdapter olarak paketlenir.

  4. Konak uygulamanın uygulama etki alanına geçtikten sonra, INativeHandleContractFrameworkElementçağrılarak ContractToViewAdapter olarak yeniden paketlenmelidir.

INativeHandleContract, ContractToViewAdapterve ViewToContractAdapter nasıl kullanıldığı belirli senaryoya bağlıdır. Aşağıdaki bölümlerde her programlama modeli için ayrıntılar sağlanır.

Add-In Kullanıcı Arabirimi Döndürür

Bir eklentinin bir konak uygulamasına kullanıcı arabirimi döndürmesi için aşağıdakiler gereklidir:

  1. .NET Framework Eklentileri ve Genişletilebilirlik belgelerinde açıklandığı gibi konak uygulaması, eklenti ve işlem hattı oluşturulmalıdır.

  2. Sözleşmenin IContract'ı uygulaması ve bir kullanıcı arabirimi döndürmek için sözleşmenin INativeHandleContracttüründe dönüş değerine sahip bir yöntem bildirmesi gerekir.

  3. Geçirilen kullanıcı arabirimi, eklenti ile konak uygulaması arasında, doğrudan ya da dolaylı olarak FrameworkElement'den türetilmiş olmalıdır.

  4. Eklenti tarafından döndürülen kullanıcı arabirimi, yalıtım sınırını aşmadan önce FrameworkElement'dan INativeHandleContract'e dönüştürülmelidir.

  5. Döndürülen kullanıcı arabirimi, yalıtım sınırını geçtikten sonra INativeHandleContract'dan FrameworkElement'e dönüştürülmelidir.

  6. Ana uygulama döndürülen FrameworkElement'ı gösterir.

Kullanıcı arabirimi döndüren bir eklentinin nasıl uygulanacağını gösteren bir örnek için bkz. Kullanıcı Arabirimi Döndüren Bir Add-In Oluşturma.

Add-In Bir Kullanıcı Arabirimidir

Eklenti bir kullanıcı arabirimi olduğunda, aşağıdakiler gereklidir:

  1. .NET Framework Eklentileri ve Genişletilebilirlik belgelerinde açıklandığı gibi konak uygulaması, eklenti ve işlem hattı oluşturulmalıdır.

  2. Eklenti için sözleşme arabirimi INativeHandleContract'ı uygulamalıdır.

  3. Konak uygulamaya geçirilen eklentinin doğrudan veya dolaylı olarak FrameworkElement'dan türetilmesi gerekir.

  4. Eklentinin yalıtım sınırını aşmadan önce bir FrameworkElement'dan INativeHandleContract'e dönüştürülmesi gerekir.

  5. Eklenti, yalıtım sınırını geçtikten sonra bir INativeHandleContract'dan FrameworkElement'e dönüştürülmelidir.

  6. Ana uygulama döndürülen FrameworkElement'ı gösterir.

Kullanıcı arabirimi olan bir eklentinin nasıl uygulanacağını gösteren bir örnek için bkz. , kullanıcı arabirimiolan bir Add-In oluşturma.

Add-In'dan Birden Çok UI'nin Döndürülmesi

Eklentiler genellikle konak uygulamalarının görüntülenmesi için birden çok kullanıcı arabirimi sağlar. Örneğin, hem kullanıcı arabirimi olup hem de konak uygulamasına durum bilgileri sağlayan bir eklentiyi düşünün. Bunun gibi bir eklenti, hem Add-In Kullanıcı Arabirimi döndürür hem de Add-In Kullanıcı Arabirimi modellerindeki tekniklerin bir bileşimi kullanılarak uygulanabilir.

Add-Ins ve XAML Tarayıcı Uygulamaları

Şu ana kadarki örneklerde ana bilgisayar uygulaması yüklü bir bağımsız uygulama olmuştur. Ancak XAML tarayıcı uygulamaları (XBAP'ler) aşağıdaki ek derleme ve uygulama gereksinimleriyle birlikte eklentileri de barındırabilir:

  • XBAP uygulama bildirimi, XBAP ile aynı klasörde, istemci makinesindeki ClickOnce uygulama önbelleğine işlem hattını (klasörler ve uygulama bileşenleri) ve eklenti bileşenini indirmek için özel olarak ayarlanmalıdır.

  • Eklentileri bulmak ve yüklemek için XBAP kodu, işlem hattı ve eklenti konumu olarak XBAP için ClickOnce uygulama önbelleğini kullanmalıdır.

  • Eklenti kaynak sitede bulunan gevşek dosyalara başvuruda bulunuyorsa, XBAP eklentiyi özel bir güvenlik bağlamı içine yüklemelidir; XBAP'ler tarafından barındırıldığında, eklentiler yalnızca ana uygulamanın kaynak sitesinde bulunan gevşek dosyalara başvurabilir.

Bu görevler aşağıdaki alt bölümlerde ayrıntılı olarak açıklanmıştır.

ClickOnce Dağıtımı için İşlem Hattı ve Add-In'ın Yapılandırılması

XBAP'ler ClickOnce dağıtım önbelleğindeki güvenli bir klasöre indirilir ve bu klasörden çalıştırılır. XBAP'nin bir eklentiyi barındırması için işlem hattı ve eklenti derlemesinin de güvenli klasöre indirilmesi gerekir. Bunu başarmak için uygulama bildirimini indirme için hem işlem hattını hem de eklenti derlemesini içerecek şekilde yapılandırmanız gerekir. Bu, en kolay şekilde Visual Studio'da yapılabilir, ancak Visual Studio'nun işlem hattı derlemelerini algılayabilmesi için işlem hattı ve eklenti derlemesinin konak XBAP projesinin kök klasöründe olması gerekir.

Sonuç olarak, ilk adım her işlem hattı derlemesinin ve eklenti derleme projelerinin derleme çıkışını ayarlayarak XBAP projesinin köküne işlem hattı ve eklenti derlemesi oluşturmaktır. Aşağıdaki tabloda, konak XBAP projesiyle aynı çözümde ve kök klasörde yer alan işlem hattı derleme projeleri ve eklenti derleme projesi için derleme çıkış yolları gösterilmektedir.

Tablo 1: XBAP Tarafından Barındırılan İşlem Hattı Derlemeleri için Çıkış Yolları Oluşturma

Boru hattı montaj projesi Çıkış yolu oluşturma
Sözleşme ..\HostXBAP\Contracts\
Add-In Görünümü ..\HostXBAP\AddInViews\
In-Side Bağdaştırıcısı Ekle ..\HostXBAP\AddInSideAdapters\
Host-Side Adaptör ..\HostXBAP\HostSideAdapters\
Add-In ..\HostXBAP\AddIns\WPFAddIn1

Sonraki adım, aşağıdakileri yaparak işlem hattı derlemelerini ve eklenti derlemesini Visual Studio'da XBAPs içerik dosyaları olarak belirtmektir:

  1. Çözüm Gezgini'nde her işlem hattı klasörüne sağ tıklayıp ProjectDahil Et'i seçerek işlem hattı ve eklenti derlemesini projeye ekleyin.

  2. Her işlem hattı derlemesinin ve eklenti derlemesinin Derleme Eylemi'ni, Özellikler penceresinden İçerik olarak ayarlayın.

Son adım, uygulama manifestini işlem hattı derleme dosyalarını ve eklenti derleme dosyasını indirmek üzere yapılandırmaktır. Dosyalar, XBAP uygulamasının kapsadığını ClickOnce önbelleğindeki klasörün kökündeki klasörlerde bulunmalıdır. Yapılandırma Visual Studio'da aşağıdakiler yapılarak yapılabilir:

  1. XBAP projesine sağ tıklayın, özelliklertıklayın, Yayımlaöğesine tıklayın ve ardından Uygulama Dosyaları düğmesine tıklayın.

  2. Uygulama Dosyaları iletişim kutusunda, her işlem hattının ve eklenti DLL'sinin Yayımlama DurumuEkle (Otomatik)olarak ayarlayın ve her işlem hattı ve eklenti DLL için İndirme Grubu(Gerekli)olarak ayarlayın.

Boru Hattını ve Uygulama Tabanından Add-In'ı Kullanma

İşlem hattı ve eklenti ClickOnce dağıtımı için yapılandırıldığında, XBAP ile aynı ClickOnce önbellek klasörüne indirilir. XBAP'den işlem hattını ve eklentiyi kullanmak için XBAP kodunun bunları uygulama tabanından alması gerekir. İşlem hatlarını ve eklentileri kullanmaya yönelik .NET Framework eklenti modelinin çeşitli türleri ve üyeleri bu senaryo için özel destek sağlar. İlk olarak, yol ApplicationBase numaralandırma değeri tarafından tanımlanır. Bu değeri, aşağıdakileri içeren işlem hatlarını kullanmak için ilgili eklenti üyelerinin aşırı yüklemeleriyle kullanırsınız:

Konağın Kaynak Sitesine Erişme

Bir eklentinin kaynak sitedeki dosyalara başvurabilmesini sağlamak için, eklentinin konak uygulamasına eşdeğer bir güvenlik yalıtımı ile yüklenmesi gerekir. Bu güvenlik düzeyi, AddInSecurityLevel.Host numaralandırma değeriyle tanımlanır ve bir eklenti etkinleştirildiğinde Activate yöntemine geçirilir.

WPF Add-In Mimarisi

Gördüğümüz gibi WPF, .NET Framework eklentilerinin, doğrudan veya dolaylı olarak FrameworkElement'dan türeyen kullanıcı arabirimlerini INativeHandleContract, ViewToContractAdapter ve ContractToViewAdapterkullanarak uygulamasına olanak tanır. Sonuç olarak, konak uygulamasındaki kullanıcı arabiriminden görüntülenen bir FrameworkElement, konak uygulamasına geri döndürülür.

Basit kullanıcı arabirimi eklentisi senaryoları için bu, geliştiricinin ihtiyaç duyduğu kadar ayrıntılıdır. Özellikle düzen, kaynaklar ve veri bağlama gibi ek WPF hizmetlerini kullanmaya çalışan daha karmaşık senaryolar için, WPF'nin .NET Framework eklenti modelini kullanıcı arabirimi desteğiyle nasıl genişlettiğinin daha ayrıntılı bilgisi, avantajlarını ve sınırlamalarını anlamak için gereklidir.

Temel olarak, WPF bir eklentiden bir konak uygulamaya kullanıcı arabirimi geçirmez; bunun yerine WPF, WPF birlikte çalışabilirliğini kullanarak kullanıcı arabirimi için Win32 pencere tutamacını geçirir. Bu nedenle, bir eklentideki kullanıcı arabirimi bir konak uygulamaya geçirildiğinde aşağıdakiler gerçekleşir:

  • Eklenti tarafında WPF, ana bilgisayar uygulaması tarafından görüntülenecek kullanıcı arabirimi için bir pencere tutamağı alır. Pencere tutamacı, HwndSource türetilen ve INativeHandleContractuygulayan bir iç WPF sınıfı tarafından kapsüllenir. Bu sınıfın bir örneği ViewToContractAdapter tarafından döndürülür ve eklentinin uygulama etki alanından konak uygulamanın uygulama etki alanına sıralanır.

  • Host uygulama tarafında WPF, HwndSourceHwndHost'den türeyen ve INativeHandleContract'yi kullanan içsel bir WPF sınıfı olarak yeniden paketler. Bu sınıfın bir örneği, konak uygulamaya ContractToViewAdapter tarafından döndürülür.

HwndHost, WPF kullanıcı arabirimlerinden pencere tanıtıcılarıyla tanımlanan kullanıcı arabirimlerini görüntülemek için vardır. Daha fazla bilgi için bkz. WPF ve Win32 Birlikte Çalışma.

Özetle, WPF kullanıcı arabiriminin pencere tutamacının bir eklentiden konak uygulamaya geçirilmesine izin vermek için INativeHandleContract, ViewToContractAdapterve ContractToViewAdapter vardır; burada bu tutamac bir HwndHost tarafından kapsüllenip konak uygulamanın kullanıcı arabiriminde gösterilir.

Uyarı

Konak uygulaması bir HwndHostaldığından, konak uygulaması ContractToViewAdapter tarafından döndürülen nesneyi eklenti tarafından uygulandığı türe dönüştüremez (örneğin, bir UserControl).

doğası gereği, HwndHost konak uygulamalarının bunları nasıl kullanabileceğini etkileyen belirli sınırlamaları vardır. Ancak WPF, eklenti senaryoları için çeşitli özelliklerle HwndHost genişletir. Bu avantajlar ve sınırlamalar aşağıda açıklanmıştır.

WPF Add-In Avantajları

WPF eklentisi kullanıcı arabirimleri konak uygulamalarından HwndHosttüretilen bir iç sınıf kullanılarak görüntülendiğinden, bu kullanıcı arabirimleri düzen, işleme, veri bağlama, stiller, şablonlar ve kaynaklar gibi WPF UI hizmetleri açısından HwndHost özellikleriyle kısıtlanır. Ancak WPF, iç HwndHost alt sınıfını aşağıdakileri içeren ek özelliklerle genişletmektedir:

  • Bir ana uygulamanın kullanıcı arabirimi ile bir eklentinin kullanıcı arabirimi arasında sekme tuşunu kullanarak geçiş yapmak. "Eklentinin bir kullanıcı arabirimi programlama modeli olan 'add-in is a UI', eklentinin tam güvenilir veya kısmen güvenilir olmasına bakılmaksızın, sekme fonksiyonunu etkinleştirmek için eklenti tarafı adaptörünün QueryContract'ı geçersiz kılmasını gerektirir, bunu unutmayın."

  • Ev sahibi uygulama kullanıcı arabirimlerinden görüntülenen eklenti kullanıcı arabirimlerinin erişilebilirlik gereksinimlerini karşılama.

  • WPF uygulamalarının birden çok uygulama etki alanı senaryosunda güvenli bir şekilde çalışmasını sağlama.

  • Eklentiler, güvenlik izolasyonu ile (yani, kısmi güven ortamı) çalıştığında eklenti kullanıcı arabirimi pencere tanıtıcılarına yasadışı erişimi önleme. Çağrı ViewToContractAdapter bu güvenliği sağlar.

    • "Eklenti bir kullanıcı arabirimi döndürür" programlama modeli için, bir eklenti kullanıcı arabiriminin pencere tutamacını yalıtım sınırı boyunca geçirmenin tek yolu ViewToContractAdapterçağırmaktır.

    • "Eklenti bir kullanıcı arabirimidir" programlama modeli için, eklentinin yan bağdaştırıcıdaki QueryContract geçersiz kılma ve eklentinin ViewToContractAdapter uygulamasını ana bilgisayar tarafı bağdaştırıcısından çağırmak gibi QueryContract çağırmak (önceki örneklerde gösterildiği gibi) gerekir.

  • Birden çok uygulama etki alanı yürütme koruması sağlama. Uygulama etki alanlarıyla ilgili sınırlamalar nedeniyle, eklenti uygulama etki alanlarında oluşan işlenmeyen özel durumlar, yalıtım sınırı mevcut olsa bile uygulamanın tamamının kilitlenmesine neden olur. Ancak WPF ve .NET Framework eklenti modeli, bu sorunu geçici olarak çözmek ve uygulama kararlılığını geliştirmek için basit bir yol sağlar. Bir kullanıcı arabirimi görüntüleyen bir WPF eklentisi, eğer konak uygulama bir WPF uygulamasıysa, uygulama etki alanının çalıştığı iş parçacığı için bir Dispatcher oluşturur. WPF eklentisinin UnhandledExceptionDispatcher olayını işleyerek uygulama etki alanında gerçekleşen tüm işlenmeyen özel durumları algılayabilirsiniz. DispatcherCurrentDispatcher özelliğinden alabilirsiniz.

WPF Add-In Sınırlamaları

WPF'nin HwndSource, HwndHostve pencere tanıtıcıları tarafından sağlanan varsayılan davranışlara eklediği avantajların ötesinde, konak uygulamalarından görüntülenen eklenti kullanıcı arabirimleri için de sınırlamalar vardır:

  • Bir konak uygulamasından görüntülenen eklenti kullanıcı arabirimleri, konak uygulamanın kırpma davranışına saygı göstermez.

  • Birlikte çalışabilirlik senaryolarında hava sahası kavramı eklentiler için de geçerlidir (bkz. Teknoloji Bölgelerine Genel Bakış).

  • Bir konak uygulamanın kaynak devralma, veri bağlama ve komut gibi kullanıcı arabirimi hizmetleri, eklenti kullanıcı arabirimlerinde otomatik olarak kullanılamaz. Eklentiye bu hizmetleri sağlamak için işlem hattını güncelleştirmeniz gerekir.

  • Eklenti kullanıcı arabirimi döndürülemez, ölçeklendirilemez, çarpıtılamaz veya dönüştürmeden başka şekilde etkilenemez (bkz. Dönüşümlere Genel Bakış).

  • System.Drawing ad alanından işlemler çizilerek işlenen eklenti kullanıcı arabirimleri içindeki içerik alfa karıştırmayı içerebilir. Ancak hem eklenti kullanıcı arabirimi hem de bunu içeren konak uygulama kullanıcı arabirimi 100% opak olmalıdır; başka bir deyişle, her ikisinde de Opacity özelliği 1 olarak ayarlanmalıdır.

  • Eklenti kullanıcı arabirimi içeren konak uygulamasındaki bir pencerenin AllowsTransparency özelliği trueolarak ayarlanırsa, eklenti görünmez. Eklenti kullanıcı arabirimi 100% opak olsa bile (yani Opacity özelliği 1 değerine sahiptir) bu durum geçerlidir.

  • Bir eklenti kullanıcı arabirimi, aynı üst düzey penceredeki diğer WPF öğelerinin üzerinde görünmelidir.

  • Eklenti kullanıcı arabiriminin hiçbir bölümü VisualBrushkullanılarak işlenemez. Bunun yerine, eklenti, sözleşme tarafından tanımlanan yöntemlerle ana uygulamaya iletilebilen bir bit eşlem oluşturmak için oluşturulan UI'nin anlık görüntüsünü alabilir.

  • Eklenti kullanıcı arabirimindeki bir MediaElement'dan medya dosyaları oynatılamaz.

  • Eklenti kullanıcı arabirimi için oluşturulan fare olayları konak uygulama tarafından alınmaz veya tetiklenmez ve konak uygulama kullanıcı arabirimi için IsMouseOver özelliği falsedeğerine sahiptir.

  • Odak bir eklenti kullanıcı arabirimindeki denetimler arasında kaydığında, GotFocus ve LostFocus olayları konak uygulama tarafından alınmaz veya tetiklenmez.

  • Bir konak uygulamasının eklenti kullanıcı arabirimi içeren bölümü yazdırıldığında beyaz görünür.

  • Konak uygulaması yürütmeye devam ederse, sahip eklentisi kaldırılmadan önce eklenti kullanıcı arabirimi tarafından oluşturulan tüm dağıtıcıların (bkz. Dispatcher) el ile kapatılması gerekir. Sözleşme, konak uygulamanın eklenti kaldırılmadan önce eklentiye sinyal göndermesine olanak sağlayan yöntemler uygulayarak eklenti kullanıcı arabiriminin dağıtıcılarını kapatmasına izin verebilir.

  • Eklenti kullanıcı arabirimi bir InkCanvas veya InkCanvasiçeriyorsa, eklentiyi kaldıramazsınız.

Performans İyileştirme

Varsayılan olarak, birden çok uygulama etki alanı kullanıldığında, her uygulama için gereken çeşitli .NET Framework derlemelerinin tümü bu uygulamanın etki alanına yüklenir. Sonuç olarak, yeni uygulama etki alanları oluşturmak ve içindeki uygulamaları başlatmak için gereken süre performansı etkileyebilir. Ancak, .NET Framework, uygulamalara, uygulama etki alanları arasında derlemeleri zaten yüklüyse paylaşmaları için talimat vererek başlangıç sürelerini azaltmanıza yardımcı olacak bir yol sunar. Bunu, giriş noktası yöntemine (LoaderOptimizationAttribute) uygulanması gereken Main özniteliğini kullanarak yaparsınız. Bu durumda, uygulama tanımınızı uygulamak için yalnızca kod kullanmanız gerekir (bkz. Uygulama Yönetimine Genel Bakış).

Ayrıca bakınız