================================= .NET Maui Application Integration ================================= IoC.Configuration provides specialized support for .NET MAUI applications via the ``IoC.Configuration.Maui`` Nuget library (source code available at `IoC.Configuration.Maui `_). Integration Process ------------------- MAUI applications use a ``MauiAppBuilder`` to configure services. IoC.Configuration hooks into this builder using the ``IIntegratesWithHostBuilder`` interface. This ensures that when MAUI attempts to resolve Pages or ViewModels, it uses the IoC.Configuration container. Key steps include: - Creating a ``MauiHostBuilder`` wrapper for your ``MauiAppBuilder`` (provided in the `IoC.Configuration.Maui `_ package). - Calling ``WithHostBuilder`` during the IoC.Configuration startup sequence. Example ------- For a complete implementation, refer to the example project ``MauiDemo.csproj`` and related projects in `ApplicationIntegrationDemos/Maui `_: The code snippet below shows how the methods ``WithHostBuilder`` and ``RegisterServiceProviderAndBuildApp`` are used in `MauiDemo.MauiProgram `_ to register the DI container configured in the IoC.Configuration file `IoCConfiguration.xml `_ with the MAUI application builder. .. note:: By using this integration, all MAUI components (Pages, ViewModels, etc.) registered in the ``MauiAppBuilder`` or in the IoC.Configuration XML file will be resolved through the IoC.Configuration container. **MauiProgram.cs**: .. sourcecode:: csharp using IoC.Configuration; using IoC.Configuration.DiContainerBuilder; using IoC.Configuration.DiContainerBuilder.FileBased; using IoC.Configuration.Maui.HostBuilder; using OROptimizer; using OROptimizer.Diagnostics.Log; using Settings = MauiDemo.Properties.Settings; namespace MauiDemo; public static class MauiProgram { public static MauiApp CreateMauiApp() { LogHelper.RegisterContext(new LogHelperContextLogToConsole()); var builder = MauiApp.CreateBuilder(); builder.UseMauiApp() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); var (mauiApp, containerInfo) = ConfigureDiAndBuildMauiApp(builder); return mauiApp; } private static (MauiApp mauiApp, IContainerInfo) ConfigureDiAndBuildMauiApp(MauiAppBuilder mauiAppBuilder) { var diContainerBuilder = new DiContainerBuilder(); var fileBasedConfigurationParameters = new FileBasedConfigurationParameters( new FileBasedConfigurationFileContentsProvider(Settings.Default.IoCConfigurationFilePath), AppContext.BaseDirectory, new AllLoadedAssemblies()) { AttributeValueTransformers = [new FileFolderPathAttributeValueTransformer()] }; var hostIntegratedContainerInfo = diContainerBuilder.StartFileBasedDi(fileBasedConfigurationParameters) .WithoutPresetDiContainer() // Add additional modules using AddAdditionalDiModules() one or multiple times as necessary // to register modules in addition to DI specified in "IoCConfiguration.xml" // If the method is not called, only the //.AddAdditionalDiModules(new MyModule()) // Use WithHostBuilder(hostBuilder) to make sure IoC.Configuration will register DI with the host builder // Do not call hostBuilder.Build() since this will be done by IoC.Configuration. .WithHostBuilder(new MauiHostBuilder(mauiAppBuilder)) .RegisterServiceProviderAndBuildApp(); // var diContainer = hostIntegratedContainerInfo.ContainerInfo.DiContainer; // From this point on either AppHost.Services or hostIntegratedContainerInfo.ContainerInfo.DiContainer // can be used to resolve services. Both will use the same DI container. return (hostIntegratedContainerInfo.Host.MauiApp, hostIntegratedContainerInfo.ContainerInfo); } } **File ``IoCConfiguration.xml``** located in the same directory as ``MauiDemo.csproj``. .. code-block:: xml