Organice su archivo .NET MAUI MauiProgram / Startup

Table of Contents

Si eres un tipo de ASP Net Core, deberías estar familiarizado con la pesadilla que es la organización de archivos de inicio. Cada archivo de inicio de la aplicación ASP Core puede incluir configuraciones, declaración de middleware, definición de inyección de dependencias, configuraciones de autenticación, directivas, entre otras cosas.

En pocas palabras: las aplicaciones pesadas tienen grandes archivos de inicio ilegibles y desordenados con cientos de líneas de código difícil de desplazar.

En esta publicación, vamos a escribir sobre lo que consideramos las mejores prácticas para los archivos de organización de inicio mientras desarrollamos nuestro proyecto .NET Multi-platform App UI (.NET MAUI). Cómo podemos mejorarlo y cómo hacerlo más mantenible.

Mientras trabajamos en un proyecto, nuestro objetivo principal es hacer que funcione como se supone que debe funcionar y cumplir con todos los requisitos del cliente. Pero, ¿no estarías de acuerdo en que crear un proyecto que funcione no es suficiente? ¿No debería ese proyecto ser mantenible y legible también?

Resulta que necesitamos poner mucha más atención en nuestros proyectos para escribirlos de una manera más legible y mantenible. La razón principal detrás de esta declaración es que probablemente no seamos los únicos que trabajaremos en ese proyecto. Lo más probable es que otras personas trabajen en él una vez que hayamos terminado con él.

Inicio de la aplicación

.NET MAUI permite inicializar aplicaciones desde una única ubicación. La clase MauiProgram es el punto de entrada a la aplicación, configurando la configuración y cableando los servicios que utilizará la aplicación. 

La clase MauiProgram

En .NET MAUI, la clase MauiProgram proporciona el punto de entrada para una aplicación. Dado que las aplicaciones MAUI de .NET se inician con el host genérico de .NET, permite que las aplicaciones se inicialicen desde una única ubicación y proporciona la capacidad de configurar fuentes, servicios y bibliotecas de terceros.

SUGERENCIA

Para más detalles, puedes ver algunos posts más antiguos donde hablo sobre la estructura del MauiProgram y su constructor.

Importante

Mi servidor fue eliminado. Mi proveedor no me da ninguna razón al respecto. Todas las publicaciones se pierden, pero encuentro un método de cómo puedo obtenerlas manualmente, pero tomará tiempo. Hasta eso, no puedes ver mis publicaciones más antiguas.

Servicios disponibles en el inicio

.NET MAUI proporciona determinados servicios y objetos de aplicación durante el inicio de la aplicación. Puede solicitar ciertos conjuntos de estos servicios simplemente incluyendo la interfaz adecuada. Los servicios disponibles para cada método de la clase MauiProgram se describen a continuación. Los servicios y objetos del marco incluyen:

  • Configuration
  • Host
    Se utiliza para generar la canalización de solicitudes de aplicación.
  • ILoggingBuilder
    Proporciona un mecanismo para crear registradores.
  • IServiceCollection
    Conjunto actual de servicios configurados en el contenedor.

Al observar cada método para la clase MauiAppBuilder en el orden en que se llaman, se pueden usar los siguientes métodos:

  • ConfigureAnimations
  • ConfigurarDespaching
  • ConfigureEffects
  • ConfigureFonts
  • ConfigureImageSources
  • ConfigureMauiHandlers

Práctica recomendada para organizar el archivo de clase MauiProgram

Entonces, como habrás adivinado, aquí es donde los métodos de extensión vienen al rescate. Aprender a organizar tu MauiProgram.cs es parte de ser un buen programador de C# y tener métodos de extensión en tu arsenal es una necesidad. Al final de este artículo, aprenderá un truco ordenado y simple para mejorar la organización de sus archivos de inicio y ahorrarse el dolor del desplazamiento interminable de archivos de inicio en sus proyectos futuros.

Los métodos de extensión se pueden usar para extender un tipo existente sin crear un tipo derivado, volver a compilar o modificar el original.

En nuestro caso, vamos a crear un método de extensión para

  • Fuentes
  • Controladores
  • Servicios

Métodos de extensión

Como un breve ejemplo, agreguemos nuestro contenedor de configuración en otro archivo utilizando los métodos de extensión.

namespace OrganizeStartup
{
    public static class ConfigExtensions
    {
        public static MauiAppBuilder RegisterFonts(this MauiAppBuilder builder)
        {
            return builder.ConfigureFonts(fonts =>
            {
                // Your fonts here...
                //fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });
        }

        public static MauiAppBuilder RegisterHandlers(this MauiAppBuilder builder)
        {
            RegisterMappers();

            return builder.ConfigureMauiHandlers(handlers =>
            {
                // Your handlers here...
                //handlers.AddHandler(typeof(MyEntry), typeof(MyEntryHandler));
            });
        }

        public static MauiAppBuilder RegisterServices(this MauiAppBuilder builder)
        {
            // Add your services here...

            // Default method
            //builder.Services.Add();

            // Scoped objects are the same within a request, but different across different requests.
            //builder.Services.AddScoped();     

            // Singleton objects are created as a single instance throughout the application. It creates the instance for the first time and reuses the same object in the all calls.
            //builder.Services.AddSingleton();  

            // Transient objects lifetime services are created each time they are requested. This lifetime works best for lightweight, stateless services.
            //builder.Services.AddTransient();  


            return builder;
        }
    }
}

Ahora, para usarlo, solo necesitamos importar el espacio de nombres OrganizeStartup.Extensions en nuestro proyecto, ¡y listo! Gracias a la magia de IntelliSense, nuestros nuevos métodos ahora se utilizan para cualquier objeto de tipo MauiAppBuilder.

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .RegisterFonts()
            .RegisterHandlers()
            .RegisterServices();

        return builder.Build();
    }
}

Consulte esta página de documentos de Microsoft para obtener más ejemplos sobre los métodos de extensión.

Organización de archivos

Dependiendo del proyecto, puede estructurar cómo puede administrar su código y archivos. En nuestro caso, para proyectos grandes con el fin de reutilizar código, y mejor lectura vamos a dividir cada configuración por archivo. De esa manera estamos obteniendo la mejor organización de proyectos y separación de preocupaciones (SoC). Vea a continuación.

Sugerencia

Puede utilizar una clase parcial para todos los métodos de extensión de configuración.

Conclusión

En este artículo, nuestro objetivo principal era familiarizarlo con las prácticas recomendadas al desarrollar un proyecto MAUI de .NET. Algunos de ellos también podrían usarse en otros marcos, por lo tanto, tenerlos en mente siempre es útil.

Recursos

Puedes encontrar el codigo de la solucion completa como ejemplo aqui.

Si encuentras que falta algo, no dudes en agregarlo en una sección de comentarios.

Gracias por leer el artículo y espero que hayas encontrado algo útil en él.

Share this content!

Facebook
Twitter
LinkedIn
Telegram
WhatsApp