.NET Maui

Simplificando los namespaces XML implícitos y globales en .NET 10 para .NET MAUI

Lo sé, lo sé… como desarrolladores somos muy felices cuando tenemos la oportunidad de ahorrarnos código sin afectar el resultado 😎. En este artículo vamos a explorar la nueva experiencia que nos permite agregar namespaces XML de una forma mucho más limpia y concisa —una característica introducida en .NET 10 Preview 5.

¿De qué se trata?

Básicamente, es un nuevo namespace (yo personalmente lo llamo “el padre” 😝) que contiene varios de los namespaces necesarios para que tu XAML funcione. De este modo, te permite eliminar casi todas las líneas xmlns repetitivas que se colocan al principio de cada archivo XAML —las que solías copiar y pegar en cada archivo… aunque siempre eran las mismas.

Exploremos a fondo los cambios de esta nueva version

Namespaces “globales” a nivel de proyecto

➖ http://schemas.microsoft.com/dotnet/maui/global es el nuevo xmlns, que permite agrupar varios bajo el mismo namespace. Por defecto, contiene los siguientes:

🔹 The MAUI xmlns (source-generated)

🔹{TuNamespace}

🔹{TuNamespace}.Pages

¡Veamos un ejemplo de cómo usarlo!

Antes (estilo .NET 8)

Después de (.NET 10 Preview 5)

Breve resumen del código:

🔷 xmlns:models o xmlns:controls ya no son necesarios porque se declaran de forma global en un archivo GlobalXmlns.cs.

🔷 En la versión anterior, para llamar a TagView necesitabas los prefijos:

🔷 Ahora puedes llamarlos directamente, sin agregarlos:

➖ Retrocompatiblidad

Aunque ahora tenemos esta forma más sencilla de agregar namespaces, las declaraciones xmlns: que ya tengas con el formato antiguo seguirán funcionando sin ningún problema. Sin embargo, te recomiendo mantener tu código actualizado con el nuevo enfoque tan pronto como puedas — ¡siempre vale la pena! 🤓

¿En cuales casos debería seguir usando xmlns: explícitos?

Úsalos cuando necesites desambiguar nombres de tipo duplicados. Imagina un caso en el que dos namespaces diferentes contienen tipos con el mismo nombre (por ejemplo, dos clases llamadas Label en distintas librerías). En ese escenario, los prefijos (controls:Label, custom:Label) te ayudarán a diferenciarlos claramente.

Namespace predeterminado implícito (opt-in)

Al habilitar esta opción, el compilador inyecta automáticamente el namespace raíz http://schemas.microsoft.com/dotnet/2021/maui, lo que significa que puedes eliminar las líneas xmlns y xmlns:x.

Parece magia, ¿verdad? 😆 Aún más limpio: aquí no necesitas agregar xmlns ni xmlns:x. porque ya están incluidos de forma implícita en el namespace global.

¿Cómo puedo probar la experiencia?

¡Por supuesto que no nos podemos quedar atrás, amig@! 😎 Busca un proyecto como ejemplo y sigue estos pasos:

1️⃣.  Actualiza el proyecto a net10.0-target frameworks.

2️⃣. Crea un archivo GlobalXmlns.cs en el nivel del proyecto para registrar tus namespaces CLR y que estén disponibles globalmente en XAML, como en el siguiente ejemplo.

3️⃣. Elimina las líneas y prefijos xmlns: redundantes de tu XAML.

La otra opción es que, si prefieres seguir usando prefijos xmlns en tu XAML, puedes definir prefijos predeterminados en el archivo GlobalXmlns.cs.

¡Listo! 😎 A partir de ahora, lo único que queda es aplicarlo a tus proyectos y mantener todo actualizado.

🙌 ¡Gracias por leer mi artículo! 💕

Si tienes alguna pregunta, siéntete libre de dejarla en los comentarios. 💚

¡Nos vemos la próxima! 🙋‍♀️


Artículo en inglés

https://askxammy.com/simplifying-implicit-and-global-xml-namespaces-in-net-10-for-net-maui/

Referencias

Este artículo se basó en la documentación oficial.

https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-10?view=net-maui-9.0?WT.mc_id=DT-MVP-50033

Tagged , ,

Leave a Reply

Your email address will not be published. Required fields are marked *