Vlastní schémata oborů názvů
Typy v knihovně .NET Multi-Platform App UI (.NET MAUI) lze odkazovat v JAZYCE XAML deklarací oboru názvů XML pro knihovnu s deklarací oboru názvů určujícím název oboru názvů CLR (Common Language Runtime) a název sestavení:
<ContentPage ...
xmlns:controls="clr-namespace:MyCompany.Controls;assembly=MyCompany.Controls">
...
</ContentPage>
Zadání oboru názvů CLR a názvu sestavení v xmlns
definici však může být nepříjemné a náchylné k chybám. Kromě toho může být vyžadováno více deklarací oboru názvů XML, pokud knihovna obsahuje typy v několika oborech názvů.
Alternativním přístupem je definovat vlastní schéma oboru názvů, například http://mycompany.com/schemas/controls
, které se mapuje na jeden nebo více oborů názvů CLR. Díky tomu může jedna deklarace oboru názvů XML odkazovat na všechny typy v sestavení, i když jsou v různých oborech názvů. Umožňuje také jednu deklaraci oboru názvů XML odkazovat na typy ve více sestaveních.
Další informace o oborech názvů XAML najdete v tématu Obory názvů XAML.
Definování vlastního schématu oboru názvů
Představte si knihovnu, která zveřejňuje některé jednoduché ovládací prvky, například CircleButton
:
namespace MyCompany.Controls
{
public class CircleButton : Button
{
...
}
}
Všechny ovládací prvky v knihovně se nacházejí v MyCompany.Controls
oboru názvů. Tyto ovládací prvky mohou být vystaveny volajícímu sestavení prostřednictvím vlastního schématu oboru názvů.
Vlastní schéma oboru názvů je definováno s XmlnsDefinitionAttribute
třídou, která určuje mapování mezi oborem názvů XAML a jedním nebo více obory názvů CLR. Přebírá XmlnsDefinitionAttribute
dva argumenty: název oboru názvů XAML a název oboru názvů CLR. Název oboru názvů XAML je uložen ve XmlnsDefinitionAttribute.XmlNamespace
vlastnosti a název oboru názvů CLR je uložen ve XmlnsDefinitionAttribute.ClrNamespace
vlastnosti.
Poznámka:
Třída XmlnsDefinitionAttribute
má také vlastnost s názvem AssemblyName
, která může být volitelně nastavena na název sestavení. To se vyžaduje pouze v případě, že je obor názvů CLR odkazovaný z externího XmlnsDefinitionAttribute
sestavení.
Měla by být definována XmlnsDefinitionAttribute
na úrovni sestavení v projektu, který obsahuje obory názvů CLR, které budou mapovány ve vlastním schématu oboru názvů:
using MyCompany.Controls;
[assembly: XmlnsDefinition("http://mycompany.com/schemas/controls", "MyCompany.Controls")]
Tento kód vytvoří vlastní schéma oboru názvů, které mapuje http://mycompany.com/schemas/controls
adresu URL na MyCompany.Controls
obor názvů CLR.
Důležité
Linker by měl dát linkeru pokyn, aby zachoval typy v sestavení, které jsou mapovány prostřednictvím vlastního schématu oboru názvů, nebo zachovat celé sestavení. Další informace naleznete v tématu Zachování kódu.
Vlastní schéma oboru názvů je pak možné použít k překladu typů v souborech XAML.
Využití vlastního schématu oboru názvů
Aby bylo možné využívat typy z vlastního schématu oboru názvů, kompilátor XAML vyžaduje, aby byl v sestavení odkaz na kód, který využívá typy, do sestavení, které definuje typy. Toho lze dosáhnout přidáním třídy obsahující metodu Init
do sestavení, které definuje typy, které budou spotřebovány prostřednictvím XAML:
namespace MyCompany.Controls
{
public static class Controls
{
public static void Init()
{
}
}
}
Metodu Init
pak lze volat ze sestavení, které využívá typy z vlastního schématu oboru názvů:
using MyCompany.Controls;
namespace CustomNamespaceSchemaDemo
{
public partial class MainPage : ContentPage
{
public MainPage()
{
Controls.Init();
InitializeComponent();
}
}
}
Upozorňující
Pokud takový odkaz na kód neobsahuje, kompilátor XAML nemůže najít sestavení obsahující vlastní typy schématu oboru názvů.
Chcete-li tento ovládací prvek využívat CircleButton
, je deklarován obor názvů XAML s deklarací oboru názvů určující adresu URL vlastního schématu oboru názvů:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="http://mycompany.com/schemas/controls"
x:Class="CustomNamespaceSchemaDemo.MainPage">
<StackLayout>
...
<controls:CircleButton Text="+"
BackgroundColor="Fuchsia"
BorderColor="Black"
CircleDiameter="100" />
<controls:CircleButton Text="-"
BackgroundColor="Teal"
BorderColor="Silver"
CircleDiameter="70" />
...
</StackLayout>
</ContentPage>
CircleButton
Instance je pak možné přidat do ContentPage deklarací s předponou controls
oboru názvů.
Pokud chcete najít vlastní typy schématu oboru názvů, bude rozhraní .NET MAUI prohledávat odkazovaná sestavení pro XmlnsDefinitionAttribute
instance. xmlns
Pokud atribut elementu v souboru XAML odpovídá XmlNamespace
hodnotě vlastnosti v XmlnsDefinitionAttribute
, .NET MAUI se pokusí použít XmlnsDefinitionAttribute.ClrNamespace
hodnotu vlastnosti pro rozlišení typu. Pokud se překlad typu nezdaří, rozhraní .NET MAUI se bude dál pokoušet o překlad typů na základě všech dalších odpovídajících XmlnsDefinitionAttribute
instancí.
Výsledkem je zobrazení dvou CircleButton
instancí: