Kontexty služby dostupné pro převaděče typů a rozšíření značek
Autoři typů, které podporují použití převaděče typů a rozšíření značek, musí často obsahovat kontextové informace o tom, kde se využití nachází v kódu nebo v okolní struktuře grafu objektů. Můžou být potřeba informace, aby byl poskytnutý objekt správně vytvořený nebo aby bylo možné vytvořit odkazy na existující objekty v grafu objektů. Při použití služeb .NET XAML je kontext, který může být vyžadován, zpřístupněn jako řada rozhraní služeb. Kód podpory rozšíření typů nebo rozšíření značek se může dotazovat na službu pomocí kontextu poskytovatele služeb, který je k dispozici a předán z XamlObjectWriter nebo souvisejících typů. Kontext schématu XAML je přímo dostupný prostřednictvím jedné takové služby. Toto téma popisuje, jak přistupovat k kontextům služby z implementace převaděče hodnot a uvádí obvykle dostupné služby a jejich role.
Získávání služeb
Jako implementátor převaděče hodnot často potřebujete přístup k určitému typu kontextu, ve kterém je použit převaděč hodnot. Tento kontext může obsahovat informace, jako je aktivní kontext schématu XAML, přístup k systému mapování typů, který poskytuje kontext schématu XAML a zapisovač objektů XAML atd. Služby dostupné pro rozšíření značek nebo implementaci převaděče typů jsou komunikovány prostřednictvím kontextových parametrů, které jsou součástí podpisu každé virtuální metody. V každém případě jste implementovali IServiceProvider v kontextu a můžete volat IServiceProvider.GetService žádost o službu.
Služby pro rozšíření značek
MarkupExtensionmá pouze jednu virtuální metodu. ProvideValue
serviceProvider
Vstupní parametr je způsob, jakým se služby předávají implementacím, když je rozšíření značek volána procesorem XAML. Následující pseudokód znázorňuje, jak se implementace rozšíření značek může dotazovat na služby v jeho ProvideValue:
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");
}
//...
}
Služby pro převaděč typů
TypeConverter má čtyři virtuální metody, které používají kontext služby a podporují použití XAML. Každá z těchto metod předává vstupní context
parametr. Tento parametr je typu ITypeDescriptorContext, ale toto rozhraní dědí IServiceProvider, a proto je GetService k dispozici metoda pro implementace převaděče typů.
Následující pseudokód znázorňuje, jak implementace převaděče typů pro použití XAML může dotazovat na služby v jednom z jeho přepsání, v tomto případě ConvertFrom:
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);
}
Služby serializátoru hodnot
Pro kontext serializátoru hodnot použijte typ poskytovatele služby, který je specifický pro ValueSerializer třídu, IValueSerializerContext. Tento kontext se předává přepsání čtyř ValueSerializer virtuálních metod. Volání GetService z kontextu pro získání služeb
Použití kontextů zprostředkovatele služeb XAML
Poskytovatel služeb pro GetService přístup ke službám XAML dostupným pro rozšíření značek nebo převaděčů typů se implementuje jako interní třída s expozicí pouze prostřednictvím rozhraní a způsobu jeho předání do relevantního kontextu. Pokaždé, když operace zpracování XAML ve výchozích implementacích .NET XAML Services cesty načtení nebo cesty k uložení vyvolá příslušné metody rozšíření značek nebo převaděče typů, které vyžadují kontext služby, tento interní objekt se předá. V závislosti na okolnostech poskytuje kontext systémové služby buď MarkupExtensionContext
nebo TextSyntaxContext
, ale specifika obou těchto tříd jsou interní. Vaše interakce s těmito třídami je omezena na vyžádání služeb od nich prostřednictvím GetService.
Dostupné služby z kontextu služby .NET XAML
Služba .NET XAML Services definuje služby pro rozšíření značek, převaděče typů, serializátory hodnot a potenciálně další použití. Následující části popisují každou z těchto služeb a poskytují pokyny k použití služby v implementaci.
IServiceProvider
Referenční dokumentace: IServiceProvider
Relevantní pro: Základní provoz infrastruktury založené na službě v rozhraní .NET, abyste mohli volat IServiceProvider.GetService.
ITypeDescriptorContext
Referenční dokumentace: ITypeDescriptorContext
Odvozuje z IServiceProvider. Tato třída představuje kontext ve standardních TypeConverter podpisech; TypeConverter je třída, která existuje od rozhraní .NET Framework 1.0. Předveduje XAML a scénář XAML TypeConverter pro převod typu řetězcová hodnota. V kontextu služeb XAML .NET jsou metody TypeConverter implementovány explicitně. Explicitní chování implementace označuje volajícím, že ITypeDescriptorContext rozhraní API není relevantní pro systémy typů XAML nebo pro čtení nebo zápis objektů z XAML.
Container, Instancea PropertyDescriptor obecně se vrací null
z kontextů služeb XAML .NET.
IValueSerializerContext
Referenční dokumentace: IValueSerializerContext
Odvozuje a ITypeDescriptorContext také spoléhá na explicitní implementace, které potlačí nepravdivé důsledky pro systém typů XAML. Podporuje pomocné metody statického vyhledávání .ValueSerializer
IXamlTypeResolver
Referenční dokumentace: IXamlTypeResolver
Definováno:System.Windows.Markup obor názvů, sestavení System.Xaml
Relevantní pro: Scénáře načtení cesty a interakce s kontextem schématu XAML
Rozhraní API služby:Resolve
Může ovlivnit mapování typu XAML-to-CLR, které je nezbytné, když zapisovač XAML vytvoří objekt CLR v grafu objektu. Resolve zpracuje potenciálně kvalifikovaný řetězec s předponou, který odpovídá názvu typu XAML (XamlType.Name) a vrátí CLR Type. Překlad typů je obvykle silně závislý na kontextu schématu XAML. Pouze kontext schématu XAML je si vědom aspektů, jako jsou načtení sestavení a které z těchto sestavení mohou nebo by měly být přístupné pro překlad typů.
IUriContext
Referenční dokumentace: IUriContext
Definováno:System.Windows.Markup obor názvů, sestavení System.Xaml
Relevantní pro: Načtení cesty a uložení cesty zpracování hodnot členů, které jsou identifikátory URI nebo x:Uri
hodnoty.
Rozhraní API služby:BaseUri
Tato služba hlásí globálně dostupný kořenový adresář identifikátoru URI, pokud existuje. Kořen identifikátoru URI lze použít k překladu relativních identifikátorů URI na absolutní identifikátory URI nebo naopak. Tento scénář je relevantní hlavně pro aplikační služby, které jsou vystaveny konkrétní architekturou, nebo schopností často používané třídy kořenových elementů v rámci architektury. Základní identifikátor URI lze navázat jako nastavení čtečky XAML, které se pak předává zapisovači objektů XAML a hlášeno touto službou.
IAmbientProvider
Referenční dokumentace: IAmbientProvider
Definováno:System.Xaml obor názvů, sestavení System.Xaml
Relevantní pro: Zpracování cest načítání a odložení vyhledávání typů nebo optimalizace.
Rozhraní API služby:GetAllAmbientValues tři další.
Koncept atmosféry v XAML je technika pro označení určitého člena typu jako okolí. Případně může být typ okolí, aby všechny hodnoty vlastností, které obsahují instanci typu, měly být považovány za okolní vlastnosti. Rozšíření značek nebo převaděče typů, které jsou dále podél datového proudu uzlu XAML a které jsou potomky v grafu objektu mohou přistupovat k okolní vlastnosti nebo instanci typu v době načtení; nebo mohou využívat znalosti okolí struktury v době úspory. To může mít vliv na stupeň kvalifikace, který je nutný k vyřešení typů pro jiné služby, například pro IXamlTypeResolver nebo pro x:Type
. Viz také AmbientPropertyValue.
IXamlSchemaContextProvider
Referenční dokumentace: IXamlSchemaContextProvider
Definováno:System.Xaml obor názvů, sestavení System.Xaml
Relevantní pro: Načíst cestu a všechny operace, které musí přeložit typ XAML na záložní typ.
Rozhraní API služby:SchemaContext
Kontext schématu XAML je nezbytný pro všechny operace odložení zatížení, protože stejný kontext schématu musí reagovat na odloženou oblast, aby bylo možné integrovat odložený obsah. Další informace o roli kontextu schématu XAML naleznete v tématu Služby XAML.
IRootObjectProvider
Referenční dokumentace: IRootObjectProvider
Definováno:System.Xaml obor názvů, sestavení System.Xaml
Relevantní pro: Načíst cestu.
Rozhraní API služby:RootObject
Služba je relevantní pro aplikační služby, které jsou vystaveny konkrétní architekturou nebo schopností často používané třídy kořenových elementů v rámci. Jedním ze scénářů pro získání kořenového objektu je připojení zakódování a zapojení událostí. Například WPF implementace x:Class
se používá pro kompilaci značek a zapojení jakéhokoli atributu obslužné rutiny události, který se nachází na libovolné jiné pozici v kódu XAML. Spojovací bod značek a kódu za definovanými částečnými třídami pro kompilaci značek je v kořenovém prvku.
IXamlNamespaceResolver
Referenční dokumentace: IXamlNamespaceResolver
Definováno:System.Xaml obor názvů, sestavení System.Xaml
Relevantní pro: Načíst cestu, uložit cestu.
Rozhraní API služby:GetNamespace pro cestu GetNamespacePrefixes načtení pro cestu uložení.
IXamlNamespaceResolver je služba, která může vrátit identifikátor oboru názvů XAML / identifikátor URI na základě jeho předpony, jak je namapováno ve zdrojovém kódu XAML.
IProvideValueTarget
Referenční dokumentace: IProvideValueTarget
Definováno:System.Windows.Markup obor názvů, sestavení System.Xaml
Relevantní pro: Načtěte cestu a uložte cestu.
Rozhraní API služby:TargetObject, TargetProperty.
IProvideValueTarget umožňuje převaděč typů nebo rozšíření značek získat kontext o tom, kde funguje při načítání. Implementace můžou tento kontext použít k zneplatnění použití. Například WPF má logiku uvnitř některé z jeho rozšíření značek, jako DynamicResourceExtensionje například . Logika zkontroluje TargetProperty , jestli se rozšíření používá pouze k nastavení vlastností závislosti (nebo krátkého seznamu dalších vlastností, které nejsou závislé).
IXamlNameResolver
Referenční dokumentace: IXamlNameResolver
Definováno:System.Xaml obor názvů, sestavení System.Xaml
Relevantní pro: Načtení definice grafu objektu cesty, překlad objektů identifikovaných x:Name
pomocí , x:Reference
nebo technik specifických pro architekturu.
Rozhraní API služeb:Resolve; další rozhraní API pro pokročilejší scénáře, jako je například práce s předávanými odkazy.
Implementace x:Reference
služby .NET XAML Services spoléhá na tuto službu. Konkrétní architektury nebo nástroje, které podporují architekturu, používají tuto službu pro x:Name
zpracování nebo ekvivalentní zpracování vlastností (RuntimeNamePropertyAttribute atributu).
IDestinationTypeProvider
Referenční dokumentace: IDestinationTypeProvider
Definováno:System.Xaml obor názvů, sestavení System.Xaml
Relevantní pro: Načtení řešení cesty nepřímých informací o typu CLR.
Rozhraní API služby:GetDestinationType
Další informace najdete na webu IDestinationTypeProvider.
Viz také
.NET Desktop feedback