diff --git a/src/Controls/src/Xaml/Hosting/AppHostBuilderExtensions.cs b/src/Controls/src/Xaml/Hosting/AppHostBuilderExtensions.cs index 9dd5733c06da..eec454b5f55f 100644 --- a/src/Controls/src/Xaml/Hosting/AppHostBuilderExtensions.cs +++ b/src/Controls/src/Xaml/Hosting/AppHostBuilderExtensions.cs @@ -184,14 +184,14 @@ static MauiAppBuilder SetupDefaults(this MauiAppBuilder builder) }); #if WINDOWS - builder.Services.TryAddEnumerable(ServiceDescriptor.Transient()); + builder.Services.TryAddEnumerable(ServiceDescriptor.Transient()); #endif builder.RemapForControls(); return builder; } - class MauiControlsInitializer : IMauiInitializeService + class MauiControlsInitializer : IMauiInitializeScopedService { public void Initialize(IServiceProvider services) { diff --git a/src/Core/src/Hosting/MauiApp.cs b/src/Core/src/Hosting/MauiApp.cs index ca1df7d21230..2eb097546605 100644 --- a/src/Core/src/Hosting/MauiApp.cs +++ b/src/Core/src/Hosting/MauiApp.cs @@ -65,4 +65,4 @@ private void DisposeConfiguration() (Configuration as IDisposable)?.Dispose(); } } -} +} \ No newline at end of file diff --git a/src/Core/src/Hosting/MauiAppBuilder.cs b/src/Core/src/Hosting/MauiAppBuilder.cs index cdbc3ef72b88..fb466ddbd1d4 100644 --- a/src/Core/src/Hosting/MauiAppBuilder.cs +++ b/src/Core/src/Hosting/MauiAppBuilder.cs @@ -43,12 +43,12 @@ internal MauiAppBuilder(bool useDefaults) this.UseEssentials(); #if WINDOWS - this.Services.TryAddEnumerable(ServiceDescriptor.Transient()); + this.Services.TryAddEnumerable(ServiceDescriptor.Transient()); #endif } } - class MauiCoreInitializer : IMauiInitializeService + class MauiCoreInitializer : IMauiInitializeScopedService { public void Initialize(IServiceProvider services) { @@ -160,7 +160,7 @@ public MauiApp Build() { foreach (var instance in initServices) { - instance.Initialize(builtApplication.Services); + instance.Initialize(serviceProvider); } } diff --git a/src/Core/src/MauiContextExtensions.cs b/src/Core/src/MauiContextExtensions.cs index 7bcf4ad192ab..186007ab02e2 100644 --- a/src/Core/src/MauiContextExtensions.cs +++ b/src/Core/src/MauiContextExtensions.cs @@ -37,7 +37,9 @@ public static IDispatcher GetDispatcher(this IMauiContext mauiContext) => public static IMauiContext MakeApplicationScope(this IMauiContext mauiContext, NativeApplication platformApplication) { - var scopedContext = new MauiContext(mauiContext.Services); + var scope = mauiContext.Services.CreateScope(); + + var scopedContext = new MauiContext(scope.ServiceProvider); scopedContext.AddSpecific(platformApplication); diff --git a/src/Core/tests/DeviceTests.Shared/MauiProgramDefaults.cs b/src/Core/tests/DeviceTests.Shared/MauiProgramDefaults.cs index b01d2202607f..7eef60b33791 100644 --- a/src/Core/tests/DeviceTests.Shared/MauiProgramDefaults.cs +++ b/src/Core/tests/DeviceTests.Shared/MauiProgramDefaults.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Reflection; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Maui.Hosting; using Microsoft.Maui.LifecycleEvents; using Microsoft.Maui.TestUtils.DeviceTests.Runners; @@ -69,6 +70,12 @@ public static MauiApp CreateMauiApp(List testAssemblies) #endif appBuilder.UseVisualRunner(); + appBuilder.ConfigureContainer(new DefaultServiceProviderFactory(new ServiceProviderOptions + { + ValidateOnBuild = true, + ValidateScopes = true, + })); + var mauiApp = appBuilder.Build(); DefaultTestApp = mauiApp.Services.GetRequiredService(); diff --git a/src/TestUtils/src/DeviceTests.Runners/HeadlessRunner/iOS/MauiTestApplicationDelegate.cs b/src/TestUtils/src/DeviceTests.Runners/HeadlessRunner/iOS/MauiTestApplicationDelegate.cs index cb83f8a7491e..1e66d5778e13 100644 --- a/src/TestUtils/src/DeviceTests.Runners/HeadlessRunner/iOS/MauiTestApplicationDelegate.cs +++ b/src/TestUtils/src/DeviceTests.Runners/HeadlessRunner/iOS/MauiTestApplicationDelegate.cs @@ -100,7 +100,11 @@ public override bool WillFinishLaunching(UIApplication application, NSDictionary }; var mauiApp = CreateMauiApp(); - Services = mauiApp.Services; + var rootContext = new MauiContext(mauiApp.Services); + + var appContext = rootContext.MakeApplicationScope(this); + + Services = appContext.Services; SetEnvironmentVariables();