Tür Dönüştürücülerinde ve İşaretleme Uzantılarında Kullanılabilir Hizmet Bağlamları

Tür dönüştürücü ve işaretleme uzantısı kullanımlarını destekleyen türlerin yazarları genellikle kullanımın işaretlemede veya çevresindeki nesne grafı yapısında bulunduğu hakkında bağlamsal bilgilere sahip olması gerekir. Sağlanan nesnenin doğru şekilde örneği oluşturması veya nesne grafında var olan nesnelere başvurular yapmak için bilgiler gerekli olabilir. .NET XAML Hizmetleri kullanılırken gerekli olan bağlam bir dizi hizmet arabirimi olarak ortaya çıkar. Tür dönüştürücü veya işaretleme uzantısı destek kodu, kullanılabilir ve ya da ilgili türlerden geçirilen bir hizmet sağlayıcısı bağlamı kullanarak bir XamlObjectWriter hizmeti sorgular. XAML şema bağlamı, bu tür bir hizmet aracılığıyla doğrudan kullanılabilir. Bu konuda, bir değer dönüştürücü uygulamasından hizmet bağlamlarına nasıl erişilen açıklanmıştır ve genellikle kullanılabilir hizmetler ve rolleri listelemektedir.

Hizmetleri Alma

Değer dönüştürücünün bir uygulayıcısı olarak, genellikle değer dönüştürücünün uygulandığı bazı bağlam türüne erişmeye ihtiyacınız olur. Bu bağlam, etkin XAML şema bağlamı, XAML şema bağlamı ve XAML nesne yazıcısı tarafından sağilen tür eşleme sistemine erişim gibi bilgileri içerebilir. Biçimlendirme uzantısı veya tür dönüştürücü uygulaması için kullanılabilen hizmetler, her sanal yöntemin imzasının parçası olan bağlam parametreleri aracılığıyla iletilecektir. Her durumda, bağlamında IServiceProvider uygulamaya alındınız ve bir hizmet isteğinde IServiceProvider.GetService olmak için çağrısı da gerçekleştirin.

İşaretleme Uzantısı hizmetleri

MarkupExtension yalnızca bir sanal yöntemi vardır: ProvideValue . Giriş parametresi, işaretleme uzantısı bir XAML işlemcisi tarafından çağrıldında serviceProvider hizmetlerin uygulamalara nasıl iletilsin? Aşağıdaki sahte kod, işaretleme uzantısı uygulamasının içinde hizmetleri nasıl sorgulay olabileceğini ProvideValue gösterir:

public override object ProvideValue(IServiceProvider serviceProvider)
{
    //...
    // Get the IXamlTypeResolver from the service provider
    if (serviceProvider == null)
    {
        throw new ArgumentNullException("serviceProvider");
    }
    IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver;
    if (xamlTypeResolver == null)
    {
        throw new ArgumentException("IXamlTypeResolver");
    }
    //...
}

Tür Dönüştürücü hizmetleri

TypeConverter , hizmet bağlamı kullanan ve XAML kullanımlarını destekleyen dört sanal yönteme sahip. Bu yöntemlerin her biri bir giriş context parametresini geçer. Bu parametre ITypeDescriptorContext türündedir, ancak bu arabirim devralınan ve bu nedenle tür dönüştürücü uygulamaları için kullanılabilen bir yöntem IServiceProviderGetService vardır.

Aşağıdaki sahte kod, XAML kullanımları için tür dönüştürücü uygulamasının geçersiz kılmalardan biri olan hizmetleri (bu örnekte) nasıl sorgulay olabileceğini ConvertFrom gösterir:

public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext,
  CultureInfo cultureInfo,
  object source)
{
    IRootObjectProvider rootProvider = typeDescriptorContext.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
    if (rootProvider != null && source is String)
    {
        //return something, else ...
    }
    throw GetConvertFromException(source);
}

Değer Seri hale getirici hizmetleri

Değer seri hale getirici bağlamı için sınıfına özgü bir hizmet sağlayıcısı türü ValueSerializerIValueSerializerContext kullanırsiniz. Bu bağlam, dört sanal yöntemin geçersiz ValueSerializer kılmaları için geçirildi. Hizmetleri GetService almak için bağlamdan çağrısı.

XAML Hizmet Sağlayıcısı Bağlamlarını Kullanma

İşaretleme uzantıları veya tür dönüştürücüler tarafından kullanılabilen XAML hizmetlerine erişim için hizmet sağlayıcısı, yalnızca arabirim üzerinden erişim ve ilgili bağlama nasıl geçiril olduğu ile bir iç sınıf GetService olarak uygulanır. Yükleme yolu veya kaydetme yolunun varsayılan .NET XAML Hizmetleri uygulamalarında bir XAML işleme işlemi, hizmet bağlamı gerektiren ilgili işaretleme uzantısını veya tür dönüştürücü yöntemlerini çağırsa, bu iç nesne geçirilsin. Duruma bağlı olarak, sistem hizmeti bağlamı veya MarkupExtensionContextTextSyntaxContext sağlar, ancak bu sınıfların her ikisinin de özellikleri içtir. Bu sınıflarla etkileşiminiz, üzerinden hizmet isteğiyle GetService sınırlıdır.

.NET XAML Hizmet Bağlamından Kullanılabilir Hizmetler

.NET XAML Hizmetleri işaretleme uzantıları, tür dönüştürücüler, değer seri hale getiricileri ve diğer olası kullanımlar için hizmetleri tanımlar. Aşağıdaki bölümlerde bu hizmetlerin her biri açıklanmaktadır ve hizmetin bir uygulamada nasıl kullanılal olabileceği hakkında rehberlik sağlar.

Iserviceprovider

Başvuru belgeleri:

İlgili olan: çağrısına sahip olmak için .NET'te hizmet tabanlı altyapının temel işlemi.

Itypedescriptorcontext

Başvuru belgeleri:

türetleri: IServiceProvider . Bu sınıf, standart imzalarda bağlamı TypeConverter temsil eder; TypeConverter 1.0'dan bu yana .NET Framework bir sınıftır. Dize-değer türü dönüştürme için XAML ve XAML TypeConverter senaryosunu önceden hazırlar. .NET XAML Hizmetleri bağlamında yöntemleri TypeConverter açıkça uygulanır. Açık uygulamanın davranışı çağrıyı yapanlara API'nin XAML tür sistemleri için veya XAML'den nesneleri okumak veya yazmak için uygun ITypeDescriptorContext olmadığını gösterir. Container, Instance ve genellikle PropertyDescriptornull .NET XAML Hizmetleri bağlamlarından geri döner.

Ivalueserializercontext

Başvuru belgeleri:

türetilen ITypeDescriptorContext ve ayrıca XAML tür sistemi hakkında yanlış etkilerin gizlenen açık uygulamalara dayandırılır. üzerinde statik arama yardımcı yöntemlerini ValueSerializer destekler.

Ixamltyperesolver

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yükleme yolu senaryoları ve XAML şema bağlamıyla etkileşim

Hizmet API'si:

XAML yazıcı bir nesne grafı içinde bir CLR nesnesi oluştururken gerekli XAML-CLR tür eşlemesini etkileyene olabilir. Resolve , bir XAML tür adına ( ) karşılık gelen bir ön ek nitelikli dizeyi işler ve XamlType.Name bir CLR Type döndürür. Türleri çözümlemek genellikle XAML şema bağlamına bağımlıdır. Yalnızca XAML şema bağlamı, hangi derlemelerin yükleniyor olduğu ve bu derlemelerden hangilerinin tür çözümlemesi için erişil gerektiği gibi önemli noktalara dikkat eder.

Iuricontext

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yolu yükleme ve ÜR'ler veya değerler olan üye değerlerinin yol işlemeyi kaydetme.

Hizmet API'si:

Bu hizmet, varsa genel olarak kullanılabilir bir URI kökünü raporlar. URI kökü göreli URI'leri mutlak URI'lere çözümlemek için veya tam tersi için kullanılabilir. Bu senaryo genellikle belirli bir çerçeve tarafından ortaya konu olan uygulama hizmetleri veya bir çerçevede sık kullanılan kök öğe sınıfının özellikleriyle ilgilidir. Temel URI, daha sonra XAML nesne yazıcıya geçirilen ve bu hizmet tarafından bildirilen bir XAML okuyucu ayarı olarak kurulabilirsiniz.

Iambientprovider

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yol işleme ve tür arama ertelemeleri veya iyileştirmeleri yükleme.

Hizmet API'leri: , üç tane daha.

XAML'de ambiyans kavramı, bir türün belirli bir üyesini ortam olarak işaretlemek için kullanılan bir tekniktir. Alternatif olarak, türün bir örneğini bulunduran tüm özellik değerlerinin ortam özellikleri olarak kabul ılacağı şekilde bir tür ortam olabilir. XAML düğüm akışında daha fazla olan ve nesne grafiğinde alt olan işaretleme uzantıları veya tür dönüştürücüleri, yükleme zamanında ortam özelliğine veya tür örneğine erişebilirsiniz; veya zaman kazanmak için ortam yapısıyla ilgili bilgileri kullanabilirler. Bu, veya gibi diğer hizmetlerin türlerini çözümlemek için gereken nitelik derecesini IXamlTypeResolverx:Type etkileyebilir. Ayrıca AmbientPropertyValue bkz. .

Ixamlschemacontextprovider

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yolu ve bir XAML türünü bir geri yükleme türüne çözümlemesi gereken herhangi bir işlemi yükleme.

Hizmet API'si:

Ertelenen içeriği tümleştirerek aynı şema bağlamının ertelenmiş alanda işlem yapmak zorunda olması gerektiğinden, tüm erteleme yükü işlemleri için XAML şema bağlamı gereklidir. XAML şema bağlamının rolü hakkında daha fazla bilgi için bkz. XAML Hizmetleri.

Irootobjectprovider

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yükleme yolu.

Hizmet API'si:

Hizmet, belirli bir çerçeve tarafından veya bir çerçevede sık kullanılan kök öğe sınıfının özellikleri tarafından ortaya konu olan uygulama hizmetleriyle ilgilidir. Kök nesneyi elde etmek için senaryolardan biri, arka arkasındaki kodu ve olay kablolarını bağlamaktır. Örneğin, WPF uygulaması, XAML işaretlemesinde başka bir konumda bulunan herhangi bir olay işleyicisi özniteliğinin işaretleme derlemesi ve x:Class kablolama için kullanılır. Işaretleme derlemesi için işaretleme ve arka kod tanımlı kısmi sınıfların bağlantı noktası kök öğesindedir.

Ixamlnamespaceresolver

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yolu yükle, yolu kaydet.

Hizmet API'si: yükleme yolu için, GetNamespacePrefixes kaydetme yolu için.

IXamlNamespaceResolver , kaynak XAML işaretlemesinde eşlenmiş olarak ön ekini temel alan bir XAML ad alanı tanımlayıcısı / URI'sini getire bir hizmettir.

Iprovidevaluetarget

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yolu yükleme ve yolu kaydetme.

Hizmet API'leri: , TargetProperty .

IProvideValueTarget , bir tür dönüştürücünün veya işaretleme uzantısının, yükleme zamanında nerede davranacakları hakkında bağlam elde özeli sağlar. Uygulamalar, kullanımı geçersiz hale etmek için bu bağlamı kullanabilir. Örneğin, WPF gibi bazı işaretleme uzantılarının içinde mantığı DynamicResourceExtension vardır. Mantık, uzantının yalnızca bağımlılık özelliklerini (veya diğer bağımlılık olmayan özelliklerin kısa bir listesini) ayarlamak için TargetProperty kullanılır.

Ixamlnameresolver

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Yükleme yolu nesne grafı tanımı, , veya çerçeveye x:Reference özgü tekniklerle tanımlanan nesneleri çözümleme.

Hizmet API'leri: ; ileri başvurularla ilgilenme gibi daha gelişmiş senaryolar için diğer API'ler.

İşlemenin .NET XAML x:Reference Hizmetleri uygulaması bu hizmete bağlı olur. Çerçeveyi destekleyen belirli çerçeveler veya araçlar, bu hizmeti işleme veya eşdeğer x:Name (öznitelikli) RuntimeNamePropertyAttribute özellik işleme için kullanır.

IDestinationTypeProvider

Başvuru belgeleri:

Tanımlanan: namespace, System.Xaml derlemesi

İlgili olan: Dolaylı CLR tür bilgilerini yükleme yolu çözümlemesi.

Hizmet API'si:

Daha fazla bilgi için bkz. IDestinationTypeProvider.

Ayrıca bkz.