Bagikan melalui


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:

Screenshot of two circle buttons.