Mirando dentro de MauiAppBuilder en .NET 6

Contenido

En este articulo, vamos a ver la clase MauiAppBuilder, porque fue agregada, y uno que otro código implementado ahi con el fin de que podamos entender como funciona la estructura de nuestros aplicativos en .NET MAUI.

Este es el primer articulo de la serie: Explorando MAUI App Builder. En esta serie habláremos sobre algunas nuevas características incluidas en .NET MAUI.

¿Que es el MauiAppBuilder?

Si te has preguntando «Que es MauiAppBuilder«, bueno, entonces te has perdido de las ultimas noticias relacionas a .NET MAUI. Pero no te preocupes, estamos aquí para ti.

MauiAppBuilder se agregó para soportar el nuevo modelo de aplicaciones móviles con .NET MAUI con el fin de simplificar el código de configuración inicial. Sin embargo, MauiAppBuilder es en gran medida un detalle de implementación. Se introdujó para optimizar un escenario específico (que describiré en breve), pero en su mayor parte, no es necesario saber que lo está utilizando.

Antes de que entremos en el MauiAppBuilder en si, vamos a ver que esta remplazando y por que.

Configuración en Xamarin.Forms

En Xamarin.FOrms tenemos muchas formas, o formas especificas dependiente el caso, de configurar los recursos que vamos a utilizar en nuestro aplicativo.

Por ejemplo:

  • Fonts – Puedes agregarlas en tu proyecto compartido y registrarlas en el assembly.
  • Images – Puedes agregarlas en tu proyecto compartido y usar una extension para usarlas.
  • Crossplatform Native LifecycleEvents – Situados en cada proyecto individual, los mas generales son soportados por librerias que puedes usar en tu proyecto compartido.
  • Renderers – Situados en cada proyecto individual con registro a nivel de assembly.
  • Entre otros.

Dependiendo de los recursos que querramos utilizar la configuración puede ser diferente o aumentar en terminos de complejidad. Gracias al ecosistema de Xamarin.Forms todo esto esta bien documentado y no creo que tengamos problemas con la configuración de estos recursos.

Si el sistema de configuración funciona bien en Xamarin.Forms ¿Entonces, porque necesitamos un AppBuilder en .NET MAUI?

El problema de «configuración parcial» en Xamarin.Forms

El problema principal es cuando necesitas configurar/desarrollar ciertos recursos que necesitan estar alojados en los proyectos nativos necesitas ir a cada proyecto de manera individual para agregar estas configuraciones.

Sim embargo, hay que decir que puede parecer un poco innecesario o aburrido tener que tener tantos lugares para configurar x o y.

Por ejemplo, cada vez que tienes que configurar una libreria que necesita acceso a los proyectos nativos tienes que ir a cada proyecto individual a configurarlo. Esto sigue funcionando asi.

Para los recursos mas generales la solución fue:

Mover las configuraciones a nuestro proyecto compartido. Aqui podemos ver por ejemplo:

  • Imagenes
  • Fonts
  • Y ya esta…

Esta es la unica configuracion que podemos compartir entre nuestros proyectos y todavia siguen siendo un poco manual por asi decirlo. Y ahi es donde entra MauiAppBuilder.

MauiAppBuilder en .NET MAUI

Aparte de simplicar el modelo de nuestra aplicación con .NET MAUI, el equipode MAUI agrego el MauiAppBuilder. Una clase que nos permitirá contruir y configurar nuestros aplicativos de una manera unificada.

Actualmente, el MauiAppBuilder tiene soporte para:

  • Fonts – Puedes registrar tus fuentes y agregarle un alias
  • Images – No necesita configuración
  • Animations – Sin documentación al momento
  • Crossplatform LifecycleEvents – Te puedes conectar a los eventos nativos facilmente.
  • Handlers – Registro de controles personalizados
  • LogginBuilder– Parece que tendremos un logger. Sin documentación al momento
  • ServicesCollection – Colección de servicios registrados
  • ConfigurationManager – Colección de configuraciones registradas
...
	/// <summary>
	/// A builder for .NET MAUI cross-platform applications and services.
	/// </summary>
	public sealed class MauiAppBuilder
	{
		private readonly HostBuilder _hostBuilder = new();
		private readonly BootstrapHostBuilder _bootstrapHostBuilder;
		private readonly MauiApplicationServiceCollection _services = new();
		private readonly LoggingBuilder _logging;
		private readonly ConfigureHostBuilder _host;
		private MauiApp? _builtApplication;

		internal MauiAppBuilder(bool useDefaults = true)
		{
			...
		}

    /// <summary>
		/// A collection of services for the application to compose. This is useful for adding user provided or framework provided services.
		/// </summary>
		public IServiceCollection Services { get; }

		/// <summary>
		/// A collection of configuration providers for the application to compose. This is useful for adding new configuration sources and providers.
		/// </summary>
		public ConfigurationManager Configuration { get; }

		/// <summary>
		/// A collection of logging providers for the application to compose. This is useful for adding new logging providers.
		/// </summary>
		public ILoggingBuilder Logging => _logging;

		/// <summary>
		/// An <see cref="IHostBuilder"/> for configuring host specific properties, but not building.
		/// To build after configuration, call <see cref="Build"/>.
		/// </summary>
		public IHostBuilder Host => _host;

    /// <summary>
		/// Builds the <see cref="MauiApp"/>.
		/// </summary>
		/// <returns>A configured <see cref="MauiApp"/>.</returns>
		public MauiApp Build()
		{
       ...
    }
    ...
 }
...

Con MauiAppBuilder, cuando se llama ConfigureFonts(), por ejemplo, el builder se carga esta configuración para luego contruir el app con esta configuracion despues con el Build().

Implementar esto es mas facil que como se describe debido a que la interfaz expone los metodos de configuración que necesitamos.

...
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });

        return builder.Build();
    }
...

Como puedes ver, ahora podemos manejar la configuración de recursos de nuestro aplicativo en un solo lugar de una manera más atrativa y con muchas funcionalidades atractivas que se agregan como un plus.

¿Podremos manejarlo todo dentro del MauiAppBuilder? Pues no.

Cada vez que veo este patrón no puedo dejar de compararlo con ASP.NET Core Web API. Es como si es un buen inicio, pero le falta un poco mas.

En ASP.NET Core podemos mapear nuestros controladores para el tema de la navegación, o saber si estamos en ambiente de desarrollo para registrar servicios extras si es necesario; como que no tenemos en el MauiAppBuilder.

Seria fantástico poder manejar la navegación de nuestras aplicaciones a nivel de servicios y no tener que depender de una librería externa para esto.

Entonces, ¿Debería preocuparme por MauiAppBuilder?

Entonces, después de haber leído todo esto de esta manera, ¿debería importarle si está usando MauiAppBuilder o no?

Probablemente no.

El nuevo MauiAppBuilder introducido en .NET MAUI optimiza el caso de uso que describí anteriormente donde necesita construir su configuración para su aplicativo.

Sin embargo, las configuraciones introducidos en Xamarin.Forms siguen siendo muy compatibles con .NET MAUI, y continúan usando los tipos y detrás de escena.

La única situación en la que puedo pensar que debes tener cuidado es si estás, o quieres, modificar o extender la clase MauiAppBuilder. Eso me parece muy poco probable, y si lo haces, ¡me interesaría saber por qué!

Pero aparte de esa excepción de nicho, no, no hay necesidad de preocuparse. Solo sé feliz sabiendo que si necesitas hacer una «configuración parcial», y estás usando el nuevo MauiAppBuilder, ¡tu aplicación será un poco más eficaz!

Resumen

En este post describí el nuevo MauiAppBuilder introducido en .NET MAUI. MauiAppBuilder se introdujo para optimizar una situación común en la que necesita una configuración «parcialmente construida». Normalmente, esto se debe a que un proveedor de configuración requiere alguna configuración, por ejemplo, la carga de secretos para una configuración que indique qué API usar.

MauiAppBuilder optimiza este escenario cargando nuestra configuración inicial antes de construir nuestro aplicativo.

Este es el primer articulo de la serie: Explorando MAUI App Builder. En esta serie habláremos sobre algunas nuevas características incluidas en .NET MAUI.

¿Qué opinas de este contenido?
 
Luis Matos

Luis Matos

I help professionals and companies to create value solutions. I am a Systems Engineer, blockchain executive, and international mobile application speaker. Founder of the Malla Consulting Agency and several international technology communities.
Suscribirte
Notificar de
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x

Buscar en el sitio