Skema namespace kustom
Jenis dalam pustaka .NET Multi-platform App UI (.NET MAUI) dapat direferensikan di XAML dengan mendeklarasikan namespace XML untuk pustaka, dengan deklarasi namespace yang menentukan nama namespace Common Language Runtime (CLR) dan nama rakitan:
<ContentPage ...
xmlns:controls="clr-namespace:MyCompany.Controls;assembly=MyCompany.Controls">
...
</ContentPage>
Namun, menentukan namespace layanan CLR dan nama rakitan dalam xmlns
definisi dapat menjadi canggung dan rawan kesalahan. Selain itu, beberapa deklarasi namespace XML mungkin diperlukan jika pustaka berisi jenis di beberapa namespace layanan.
Pendekatan alternatif adalah menentukan skema namespace kustom, seperti http://mycompany.com/schemas/controls
, yang memetakan ke satu atau beberapa namespace CLR. Ini memungkinkan deklarasi namespace XML tunggal untuk mereferensikan semua jenis dalam rakitan, bahkan jika berada di namespace yang berbeda. Ini juga memungkinkan deklarasi namespace XML tunggal untuk mereferensikan jenis dalam beberapa rakitan.
Untuk informasi selengkapnya tentang namespace XAML, lihat namespace XAML.
Menentukan skema namespace kustom
Bayangkan pustaka yang mengekspos beberapa kontrol sederhana, seperti CircleButton
:
namespace MyCompany.Controls
{
public class CircleButton : Button
{
...
}
}
Semua kontrol di pustaka berada di MyCompany.Controls
namespace layanan. Kontrol ini dapat diekspos ke rakitan panggilan melalui skema namespace kustom.
Skema namespace kustom didefinisikan dengan XmlnsDefinitionAttribute
kelas , yang menentukan pemetaan antara namespace XAML dan satu atau beberapa namespace CLR. mengambil XmlnsDefinitionAttribute
dua argumen: nama namespace XAML, dan nama namespace CLR. Nama namespace XAML disimpan di XmlnsDefinitionAttribute.XmlNamespace
properti , dan nama namespace CLR disimpan di XmlnsDefinitionAttribute.ClrNamespace
properti .
Catatan
Kelas ini XmlnsDefinitionAttribute
juga memiliki properti bernama AssemblyName
, yang dapat secara opsional diatur ke nama assembly. Ini hanya diperlukan ketika namespace CLR yang XmlnsDefinitionAttribute
dirujuk dari berada di rakitan eksternal.
XmlnsDefinitionAttribute
harus didefinisikan pada tingkat perakitan dalam proyek yang berisi namespace CLR yang akan dipetakan dalam skema namespace kustom:
using MyCompany.Controls;
[assembly: XmlnsDefinition("http://mycompany.com/schemas/controls", "MyCompany.Controls")]
Kode ini membuat skema namespace kustom yang memetakan http://mycompany.com/schemas/controls
URL ke MyCompany.Controls
namespace CLR.
Penting
Anda harus menginstruksikan linker untuk mempertahankan jenis dalam rakitan yang dipetakan melalui skema namespace kustom, atau mempertahankan seluruh rakitan. Untuk informasi selengkapnya, lihat Mempertahankan kode.
Skema namespace kustom kemudian dapat digunakan untuk resolusi jenis dalam file XAML.
Menggunakan skema namespace kustom
Untuk menggunakan jenis dari skema namespace kustom, pengkompilasi XAML mengharuskan ada referensi kode dari rakitan yang menggunakan jenis, ke rakitan yang menentukan jenis. Ini dapat dicapai dengan menambahkan kelas yang Init
berisi metode ke perakitan yang menentukan jenis yang akan dikonsumsi melalui XAML:
namespace MyCompany.Controls
{
public static class Controls
{
public static void Init()
{
}
}
}
Metode kemudian Init
dapat dipanggil dari rakitan yang menggunakan jenis dari skema namespace kustom:
using MyCompany.Controls;
namespace CustomNamespaceSchemaDemo
{
public partial class MainPage : ContentPage
{
public MainPage()
{
Controls.Init();
InitializeComponent();
}
}
}
Peringatan
Kegagalan untuk menyertakan referensi kode tersebut akan mengakibatkan pengkompilasi XAML tidak dapat menemukan rakitan yang berisi jenis skema namespace kustom.
Untuk menggunakan CircleButton
kontrol, namespace XAML dideklarasikan, dengan deklarasi namespace yang menentukan URL skema namespace kustom:
<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
instans kemudian dapat ditambahkan ke ContentPage dengan mendeklarasikannya dengan awalan controls
namespace.
Untuk menemukan jenis skema namespace kustom, .NET MAUI akan mencari rakitan yang dirujuk untuk XmlnsDefinitionAttribute
instans. xmlns
Jika atribut untuk elemen dalam file XAML cocok dengan XmlNamespace
nilai properti dalam XmlnsDefinitionAttribute
, .NET MAUI akan mencoba menggunakan XmlnsDefinitionAttribute.ClrNamespace
nilai properti untuk resolusi jenis. Jika resolusi jenis gagal, .NET MAUI akan terus mencoba resolusi jenis berdasarkan instans pencocokan XmlnsDefinitionAttribute
tambahan.
Hasilnya adalah bahwa dua CircleButton
instans ditampilkan:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk