diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 981af17fef54..b4c179a3cd54 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -15,7 +15,7 @@
]
},
"microsoft.dotnet.xharness.cli": {
- "version": "1.0.0-prerelease.21404.1",
+ "version": "1.0.0-prerelease.21425.2",
"commands": [
"xharness"
]
diff --git a/eng/Microsoft.Extensions.targets b/eng/Microsoft.Extensions.targets
index 7510be16cb19..d15d1b07c10d 100644
--- a/eng/Microsoft.Extensions.targets
+++ b/eng/Microsoft.Extensions.targets
@@ -3,19 +3,7 @@
<_UseNet6Packages Condition=" '$(TargetFramework.Contains(net6.0))' == 'true' or '$(PackageType)' == 'DotnetPlatform' ">true
- <_MicrosoftHostingVersion>5.0.0
4.7.0
- (_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- 5.0.1
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
- $(_MicrosoftHostingVersion)
@@ -69,6 +57,10 @@
Update="Microsoft.Extensions.FileProviders.Abstractions"
Version="$(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion)"
/>
+
https://github.com/dotnet/runtime
14b34eb02bc8969b77c0d3a1e39fb38f450625cf
+
+ https://github.com/dotnet/runtime
+ 58efa4b79751a2dad08d9bf7ca67930f8160afe3
+
https://github.com/dotnet/runtime
14b34eb02bc8969b77c0d3a1e39fb38f450625cf
diff --git a/eng/Versions.props b/eng/Versions.props
index d2ac516e10de..4bba8896a949 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -10,6 +10,7 @@
12.0.100-rc.1.521
6.0.0-rc.1.21417.1
6.0.0-rc.1.21417.1
+ 6.0.0-rc.1.21417.1
6.0.0-rc.1.21417.1
6.0.0-rc.1.21417.1
6.0.0-rc.1.21417.1
diff --git a/src/BlazorWebView/src/Maui/BlazorWebViewRegistrationExtensions.cs b/src/BlazorWebView/src/Maui/BlazorWebViewRegistrationExtensions.cs
index 30ee76f0668e..ad927896205b 100644
--- a/src/BlazorWebView/src/Maui/BlazorWebViewRegistrationExtensions.cs
+++ b/src/BlazorWebView/src/Maui/BlazorWebViewRegistrationExtensions.cs
@@ -1,18 +1,19 @@
using System;
+using Microsoft.Maui;
using Microsoft.Maui.Hosting;
namespace Microsoft.AspNetCore.Components.WebView.Maui
{
public static class BlazorWebViewRegistrationExtensions
{
- public static TAppHostBuilder RegisterBlazorMauiWebView(this TAppHostBuilder appHostBuilder) where TAppHostBuilder : IAppHostBuilder
+ public static MauiAppBuilder RegisterBlazorMauiWebView(this MauiAppBuilder appHostBuilder)
{
if (appHostBuilder is null)
{
throw new ArgumentNullException(nameof(appHostBuilder));
}
- appHostBuilder.ConfigureMauiHandlers((_, handlers) => handlers.AddHandler());
+ appHostBuilder.ConfigureMauiHandlers(handlers => handlers.AddHandler());
return appHostBuilder;
}
diff --git a/src/Compatibility/ControlGallery/src/Core/Startup.cs b/src/Compatibility/ControlGallery/src/Core/Startup.cs
index 308c1f1dd206..3fc4bf7e8a06 100644
--- a/src/Compatibility/ControlGallery/src/Core/Startup.cs
+++ b/src/Compatibility/ControlGallery/src/Core/Startup.cs
@@ -6,13 +6,20 @@
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
{
- public class Startup : IStartup
+ public static class MauiProgram
{
internal static bool UseBlazor = false;
- public virtual void Configure(IAppHostBuilder appBuilder)
+ public static MauiApp CreateMauiApp()
{
- appBuilder
+ var builder = CreateMauiAppBuilder();
+ return builder.Build();
+ }
+
+ public static MauiAppBuilder CreateMauiAppBuilder()
+ {
+ var builder = MauiApp.CreateBuilder();
+ builder
.UseMauiApp()
.ConfigureMauiHandlers(handlers =>
{
@@ -26,14 +33,14 @@ public virtual void Configure(IAppHostBuilder appBuilder)
{
fonts.AddCompatibilityFonts(Device.GetAssemblies());
})
- .ConfigureServices(services =>
- {
- DependencyService.Register(Device.GetAssemblies());
- })
.ConfigureEffects(effects =>
{
effects.AddCompatibilityEffects(Device.GetAssemblies());
});
+
+ DependencyService.Register(Device.GetAssemblies());
+
+ return builder;
}
}
}
diff --git a/src/Compatibility/ControlGallery/src/WinUI/App.xaml.cs b/src/Compatibility/ControlGallery/src/WinUI/App.xaml.cs
index 19e91c85a86c..4276fb0079c0 100644
--- a/src/Compatibility/ControlGallery/src/WinUI/App.xaml.cs
+++ b/src/Compatibility/ControlGallery/src/WinUI/App.xaml.cs
@@ -16,6 +16,6 @@ public App()
InitializeComponent();
}
- protected override IStartup OnCreateStartup() => new WinUIStartup();
+ protected override MauiApp CreateMauiApp() => WinUIMauiProgram.CreateMauiApp();
}
}
diff --git a/src/Compatibility/ControlGallery/src/WinUI/WinUIStartup.cs b/src/Compatibility/ControlGallery/src/WinUI/WinUIStartup.cs
index 01e3c0edfd15..e27bca68c3fa 100644
--- a/src/Compatibility/ControlGallery/src/WinUI/WinUIStartup.cs
+++ b/src/Compatibility/ControlGallery/src/WinUI/WinUIStartup.cs
@@ -1,5 +1,6 @@
using System;
using System.Globalization;
+using System.Reflection.PortableExecutable;
using Microsoft.Maui.Controls.Compatibility.Platform.UWP;
using Microsoft.Maui.Controls.Platform;
using Microsoft.Maui.Graphics;
@@ -15,13 +16,13 @@
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.WinUI
{
- public class WinUIStartup : Startup
+ public class WinUIMauiProgram
{
- public override void Configure(IAppHostBuilder appBuilder)
+ public static MauiApp CreateMauiApp()
{
- base.Configure(appBuilder);
+ var builder = MauiProgram.CreateMauiAppBuilder();
- appBuilder.ConfigureLifecycleEvents(lifecycle => lifecycle
+ builder.ConfigureLifecycleEvents(lifecycle => lifecycle
.AddWindows(windows => windows
.OnLaunching((_, e) =>
{
@@ -32,6 +33,8 @@ public override void Configure(IAppHostBuilder appBuilder)
}
})
.OnActivated(WinUIPageStartup.OnActivated)));
+
+ return builder.Build();
}
}
diff --git a/src/Compatibility/ControlGallery/src/iOS/AppDelegate.cs b/src/Compatibility/ControlGallery/src/iOS/AppDelegate.cs
index 7da514d17287..8504dc256440 100644
--- a/src/Compatibility/ControlGallery/src/iOS/AppDelegate.cs
+++ b/src/Compatibility/ControlGallery/src/iOS/AppDelegate.cs
@@ -6,6 +6,7 @@
using CoreGraphics;
using Foundation;
using UIKit;
+using Microsoft.Maui;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Controls.Compatibility.ControlGallery.iOS;
using Microsoft.Maui.Controls.Compatibility;
@@ -100,8 +101,10 @@ public string GetTestCloudDevice()
}
[Register("AppDelegate")]
- public partial class AppDelegate : MauiUIApplicationDelegate
+ public partial class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+
public override bool FinishedLaunching(UIApplication uiApplication, NSDictionary launchOptions)
{
UISwitch.Appearance.OnTintColor = UIColor.Red;
diff --git a/src/Compatibility/Core/src/AppHostBuilderExtensions.Android.cs b/src/Compatibility/Core/src/AppHostBuilderExtensions.Android.cs
index 7c89f1fb3538..ac32a1b5b4f0 100644
--- a/src/Compatibility/Core/src/AppHostBuilderExtensions.Android.cs
+++ b/src/Compatibility/Core/src/AppHostBuilderExtensions.Android.cs
@@ -6,7 +6,7 @@ namespace Microsoft.Maui.Controls.Hosting
{
public static partial class AppHostBuilderExtensions
{
- internal static IAppHostBuilder ConfigureCompatibilityLifecycleEvents(this IAppHostBuilder builder) =>
+ internal static MauiAppBuilder ConfigureCompatibilityLifecycleEvents(this MauiAppBuilder builder) =>
builder.ConfigureLifecycleEvents(events => events.AddAndroid(OnConfigureLifeCycle));
static void OnConfigureLifeCycle(IAndroidLifecycleBuilder android)
diff --git a/src/Compatibility/Core/src/AppHostBuilderExtensions.Standard.cs b/src/Compatibility/Core/src/AppHostBuilderExtensions.Standard.cs
index f0ac34387ee1..298c043e9681 100644
--- a/src/Compatibility/Core/src/AppHostBuilderExtensions.Standard.cs
+++ b/src/Compatibility/Core/src/AppHostBuilderExtensions.Standard.cs
@@ -6,7 +6,7 @@ namespace Microsoft.Maui.Controls.Hosting
{
public static partial class AppHostBuilderExtensions
{
- internal static IAppHostBuilder ConfigureCompatibilityLifecycleEvents(this IAppHostBuilder builder) =>
+ internal static MauiAppBuilder ConfigureCompatibilityLifecycleEvents(this MauiAppBuilder builder) =>
builder;
}
}
diff --git a/src/Compatibility/Core/src/AppHostBuilderExtensions.Windows.cs b/src/Compatibility/Core/src/AppHostBuilderExtensions.Windows.cs
index 8308f1fb5536..d0d1747efc3e 100644
--- a/src/Compatibility/Core/src/AppHostBuilderExtensions.Windows.cs
+++ b/src/Compatibility/Core/src/AppHostBuilderExtensions.Windows.cs
@@ -17,7 +17,7 @@ namespace Microsoft.Maui.Controls.Hosting
{
public static partial class AppHostBuilderExtensions
{
- internal static IAppHostBuilder ConfigureCompatibilityLifecycleEvents(this IAppHostBuilder builder) =>
+ internal static MauiAppBuilder ConfigureCompatibilityLifecycleEvents(this MauiAppBuilder builder) =>
builder.ConfigureLifecycleEvents(events => events.AddWindows(OnConfigureLifeCycle));
static void OnConfigureLifeCycle(IWindowsLifecycleBuilder windows)
diff --git a/src/Compatibility/Core/src/AppHostBuilderExtensions.cs b/src/Compatibility/Core/src/AppHostBuilderExtensions.cs
index 31f1755bf20f..1ad2e6a24c10 100644
--- a/src/Compatibility/Core/src/AppHostBuilderExtensions.cs
+++ b/src/Compatibility/Core/src/AppHostBuilderExtensions.cs
@@ -1,6 +1,7 @@
#nullable enable
using System;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Controls.Shapes;
@@ -40,36 +41,25 @@
namespace Microsoft.Maui.Controls.Hosting
{
- public static partial class AppHostBuilderExtensions
+ public static class MauiAppBuilderExtensions
{
- public static IAppHostBuilder UseMauiApp(this IAppHostBuilder builder)
+ public static MauiAppBuilder UseMauiApp(this MauiAppBuilder builder)
where TApp : class, IApplication
{
- builder.ConfigureServices((context, collection) =>
- {
- collection.AddSingleton();
- });
-
+ builder.Services.TryAddSingleton();
builder.SetupDefaults();
-
return builder;
}
- public static IAppHostBuilder UseMauiApp(this IAppHostBuilder builder, Func implementationFactory)
+ public static MauiAppBuilder UseMauiApp(this MauiAppBuilder builder, Func implementationFactory)
where TApp : class, IApplication
{
- builder.ConfigureServices((context, collection) =>
- {
- collection.AddSingleton(implementationFactory);
- });
-
+ builder.Services.TryAddSingleton(implementationFactory);
builder.SetupDefaults();
-
return builder;
}
-
- static IAppHostBuilder ConfigureImageSourceHandlers(this IAppHostBuilder builder)
+ static MauiAppBuilder ConfigureImageSourceHandlers(this MauiAppBuilder builder)
{
builder.ConfigureImageSources(services =>
{
@@ -82,7 +72,7 @@ static IAppHostBuilder ConfigureImageSourceHandlers(this IAppHostBuilder builder
return builder;
}
- static IAppHostBuilder SetupDefaults(this IAppHostBuilder builder)
+ static MauiAppBuilder SetupDefaults(this MauiAppBuilder builder)
{
builder.ConfigureCompatibilityLifecycleEvents();
builder.ConfigureImageSourceHandlers();
@@ -180,16 +170,30 @@ static IAppHostBuilder SetupDefaults(this IAppHostBuilder builder)
VisualElement.RemapForControls();
Label.RemapForControls();
Button.RemapForControls();
+ });
- })
- .ConfigureServices();
+ builder.AddMauiCompat();
return builder;
}
- class MauiCompatBuilder : IMauiServiceBuilder
+ private static MauiAppBuilder AddMauiCompat(this MauiAppBuilder builder)
{
- public void Configure(HostBuilderContext context, IServiceProvider services)
+#if __IOS__ || MACCATALYST
+ builder.Services.TryAddSingleton(NativeGraphicsService.Instance);
+#elif __ANDROID__
+ builder.Services.TryAddSingleton(NativeGraphicsService.Instance);
+#elif WINDOWS
+ builder.Services.TryAddSingleton(W2DGraphicsService.Instance);
+#endif
+
+ builder.Services.TryAddEnumerable(ServiceDescriptor.Transient());
+ return builder;
+ }
+
+ class MauiCompatInitializer : IMauiInitializeService
+ {
+ public void Initialize(IServiceProvider services)
{
#if __ANDROID__ || __IOS__ || WINDOWS || MACCATALYST
CompatServiceProvider.SetServiceProvider(services);
@@ -217,17 +221,6 @@ public void Configure(HostBuilderContext context, IServiceProvider services)
#endif
}
- public void ConfigureServices(HostBuilderContext context, IServiceCollection services)
- {
-#if __IOS__ || MACCATALYST
- services.AddSingleton(NativeGraphicsService.Instance);
-#elif __ANDROID__
- services.AddSingleton(NativeGraphicsService.Instance);
-#elif WINDOWS
- services.AddSingleton(W2DGraphicsService.Instance);
-#endif
- }
-
#if WINDOWS
static void AddLibraryResources(string key, string uri)
{
diff --git a/src/Compatibility/Core/src/AppHostBuilderExtensions.iOS.cs b/src/Compatibility/Core/src/AppHostBuilderExtensions.iOS.cs
index b9958f522dc5..1a064d72e303 100644
--- a/src/Compatibility/Core/src/AppHostBuilderExtensions.iOS.cs
+++ b/src/Compatibility/Core/src/AppHostBuilderExtensions.iOS.cs
@@ -6,7 +6,7 @@ namespace Microsoft.Maui.Controls.Hosting
{
public static partial class AppHostBuilderExtensions
{
- internal static IAppHostBuilder ConfigureCompatibilityLifecycleEvents(this IAppHostBuilder builder) =>
+ internal static MauiAppBuilder ConfigureCompatibilityLifecycleEvents(this MauiAppBuilder builder) =>
builder.ConfigureLifecycleEvents(events => events.AddiOS(OnConfigureLifeCycle));
static void OnConfigureLifeCycle(IiOSLifecycleBuilder iOS)
diff --git a/src/Controls/samples/Controls.Sample.Droid/MainApplication.cs b/src/Controls/samples/Controls.Sample.Droid/MainApplication.cs
index 4462822737ae..90ebd5fddfa2 100644
--- a/src/Controls/samples/Controls.Sample.Droid/MainApplication.cs
+++ b/src/Controls/samples/Controls.Sample.Droid/MainApplication.cs
@@ -7,10 +7,12 @@
namespace Maui.Controls.Sample.Droid
{
[Application]
- public class MainApplication : MauiApplication
+ public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership)
{
}
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
-}
\ No newline at end of file
+}
diff --git a/src/Controls/samples/Controls.Sample.MacCatalyst/AppDelegate.cs b/src/Controls/samples/Controls.Sample.MacCatalyst/AppDelegate.cs
index 70e3b7ea96d3..4069dfbf008c 100644
--- a/src/Controls/samples/Controls.Sample.MacCatalyst/AppDelegate.cs
+++ b/src/Controls/samples/Controls.Sample.MacCatalyst/AppDelegate.cs
@@ -11,7 +11,8 @@
namespace Sample.MacCatalyst
{
[Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
+ public class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.Profiling/Platforms/Android/MainApplication.cs b/src/Controls/samples/Controls.Sample.Profiling/Platforms/Android/MainApplication.cs
index d12d1aea8b30..ca74a7817308 100644
--- a/src/Controls/samples/Controls.Sample.Profiling/Platforms/Android/MainApplication.cs
+++ b/src/Controls/samples/Controls.Sample.Profiling/Platforms/Android/MainApplication.cs
@@ -6,10 +6,12 @@
namespace Maui.Controls.Sample.Profiling
{
[Application]
- public class MainApplication : MauiApplication
+ public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership)
{
}
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.Profiling/Platforms/MacCatalyst/AppDelegate.cs b/src/Controls/samples/Controls.Sample.Profiling/Platforms/MacCatalyst/AppDelegate.cs
index a1cbd96a99f4..067a47afe8d8 100644
--- a/src/Controls/samples/Controls.Sample.Profiling/Platforms/MacCatalyst/AppDelegate.cs
+++ b/src/Controls/samples/Controls.Sample.Profiling/Platforms/MacCatalyst/AppDelegate.cs
@@ -4,7 +4,8 @@
namespace Maui.Controls.Sample.Profiling
{
[Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
+ public class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.Profiling/Platforms/iOS/AppDelegate.cs b/src/Controls/samples/Controls.Sample.Profiling/Platforms/iOS/AppDelegate.cs
index a1cbd96a99f4..067a47afe8d8 100644
--- a/src/Controls/samples/Controls.Sample.Profiling/Platforms/iOS/AppDelegate.cs
+++ b/src/Controls/samples/Controls.Sample.Profiling/Platforms/iOS/AppDelegate.cs
@@ -4,7 +4,8 @@
namespace Maui.Controls.Sample.Profiling
{
[Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
+ public class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.Profiling/Startup.cs b/src/Controls/samples/Controls.Sample.Profiling/Startup.cs
index a3ae6d507a48..c309ae512252 100644
--- a/src/Controls/samples/Controls.Sample.Profiling/Startup.cs
+++ b/src/Controls/samples/Controls.Sample.Profiling/Startup.cs
@@ -7,16 +7,20 @@
namespace Maui.Controls.Sample.Profiling
{
- public class Startup : IStartup
+ public static class MauiProgram
{
- public void Configure(IAppHostBuilder appBuilder)
+ public static MauiApp CreateMauiApp()
{
- appBuilder
+ var builder = MauiApp.CreateBuilder();
+
+ builder
.UseMauiApp()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
+
+ return builder.Build();
}
}
}
diff --git a/src/Controls/samples/Controls.Sample.SingleProject/MainWindow.cs b/src/Controls/samples/Controls.Sample.SingleProject/MainWindow.cs
index a62a390aa430..c1f991069987 100644
--- a/src/Controls/samples/Controls.Sample.SingleProject/MainWindow.cs
+++ b/src/Controls/samples/Controls.Sample.SingleProject/MainWindow.cs
@@ -5,7 +5,7 @@ namespace Maui.Controls.Sample.SingleProject
{
public class MainWindow : Window
{
- public MainWindow() : base(Startup.UseBlazor ? new BlazorPage() : new MainPage())
+ public MainWindow() : base(MauiProgram.UseBlazor ? new BlazorPage() : new MainPage())
{
}
}
diff --git a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Android/MainApplication.cs b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Android/MainApplication.cs
index 2e3b3e23ca5d..c51e98435125 100644
--- a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Android/MainApplication.cs
+++ b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Android/MainApplication.cs
@@ -6,10 +6,12 @@
namespace Maui.Controls.Sample.SingleProject
{
[Application]
- public class MainApplication : MauiApplication
+ public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership)
{
}
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/MacCatalyst/AppDelegate.cs b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/MacCatalyst/AppDelegate.cs
index 96ec576cb749..f27e234b7104 100644
--- a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/MacCatalyst/AppDelegate.cs
+++ b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/MacCatalyst/AppDelegate.cs
@@ -4,7 +4,8 @@
namespace Maui.Controls.Sample.SingleProject
{
[Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
+ public class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Windows/App.xaml.cs b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Windows/App.xaml.cs
index a52fe031f12b..e5c785008aa6 100644
--- a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Windows/App.xaml.cs
+++ b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/Windows/App.xaml.cs
@@ -22,7 +22,8 @@ public App()
}
}
- public class MiddleApp : MauiWinUIApplication
+ public class MiddleApp : MauiWinUIApplication
{
- }
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
}
diff --git a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/iOS/AppDelegate.cs b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/iOS/AppDelegate.cs
index 96ec576cb749..f27e234b7104 100644
--- a/src/Controls/samples/Controls.Sample.SingleProject/Platforms/iOS/AppDelegate.cs
+++ b/src/Controls/samples/Controls.Sample.SingleProject/Platforms/iOS/AppDelegate.cs
@@ -4,7 +4,8 @@
namespace Maui.Controls.Sample.SingleProject
{
[Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
+ public class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.SingleProject/Startup.cs b/src/Controls/samples/Controls.Sample.SingleProject/Startup.cs
index 1ba1c1d6dae6..09ae9b7b3e86 100644
--- a/src/Controls/samples/Controls.Sample.SingleProject/Startup.cs
+++ b/src/Controls/samples/Controls.Sample.SingleProject/Startup.cs
@@ -1,31 +1,27 @@
using Microsoft.Maui;
-using Microsoft.Maui.Controls.Compatibility;
-using Microsoft.Maui.Hosting;
using Microsoft.AspNetCore.Components.WebView.Maui;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Maui.Controls.Hosting;
namespace Maui.Controls.Sample.SingleProject
{
- public class Startup : IStartup
+ public static class MauiProgram
{
internal static bool UseBlazor = false;
- public void Configure(IAppHostBuilder appBuilder)
+ public static MauiApp CreateMauiApp()
{
+ var appBuilder = MauiApp.CreateBuilder();
appBuilder
- .RegisterBlazorMauiWebView()
.UseMauiApp();
if (UseBlazor)
- {
- appBuilder.UseMicrosoftExtensionsServiceProviderFactory(); // Blazor requires service scopes, which are supported only with Microsoft.Extensions.DependencyInjection
- appBuilder
- .ConfigureServices(services =>
- {
- services.AddBlazorWebView();
- });
+ {
+ appBuilder.RegisterBlazorMauiWebView();
+ appBuilder.Services.AddBlazorWebView();
}
+
+ return appBuilder.Build();
}
}
}
diff --git a/src/Controls/samples/Controls.Sample.WinUI/App.xaml.cs b/src/Controls/samples/Controls.Sample.WinUI/App.xaml.cs
index 874b0fc54006..935ad7ace227 100644
--- a/src/Controls/samples/Controls.Sample.WinUI/App.xaml.cs
+++ b/src/Controls/samples/Controls.Sample.WinUI/App.xaml.cs
@@ -9,6 +9,6 @@ public App()
InitializeComponent();
}
- protected override IStartup OnCreateStartup() => new Startup();
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample.iOS/AppDelegate.cs b/src/Controls/samples/Controls.Sample.iOS/AppDelegate.cs
index cfcc70970938..b500dfdad512 100644
--- a/src/Controls/samples/Controls.Sample.iOS/AppDelegate.cs
+++ b/src/Controls/samples/Controls.Sample.iOS/AppDelegate.cs
@@ -4,7 +4,8 @@
namespace Maui.Controls.Sample.iOS
{
[Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
+ public class AppDelegate : MauiUIApplicationDelegate
{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
\ No newline at end of file
diff --git a/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryAppHostBuilderExtensions.cs b/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryAppHostBuilderExtensions.cs
index a864244d7e44..52aab9565362 100644
--- a/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryAppHostBuilderExtensions.cs
+++ b/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryAppHostBuilderExtensions.cs
@@ -1,13 +1,21 @@
using System;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Maui;
using Microsoft.Maui.Hosting;
namespace Maui.Controls.Sample.Controls
{
static class BordelessEntryAppHostBuilderExtensions
{
- public static IAppHostBuilder UseBordelessEntry(this IAppHostBuilder builder, Action configureDelegate = null)
+ public static MauiAppBuilder UseBordelessEntry(this MauiAppBuilder builder, Action configureDelegate = null)
{
- builder.ConfigureServices((ctx, red) => configureDelegate?.Invoke(red));
+ builder.Services.TryAddSingleton();
+
+ if (configureDelegate != null)
+ {
+ builder.Services.AddSingleton(new BorderlessEntryRegistration(configureDelegate));
+ }
return builder;
}
diff --git a/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryServiceBuilder.cs b/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryServiceBuilder.cs
index 468dc71bdca0..3bfd555225c4 100644
--- a/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryServiceBuilder.cs
+++ b/src/Controls/samples/Controls.Sample/Controls/BordelessEntry/BordelessEntryServiceBuilder.cs
@@ -7,10 +7,25 @@
namespace Maui.Controls.Sample.Controls
{
- class BordelessEntryServiceBuilder : IMauiServiceBuilder
+ internal class BorderlessEntryRegistration
{
- static IMauiHandlersCollection HandlersCollection;
- static readonly Dictionary PendingHandlers = new();
+ private readonly Action _builderAction;
+
+ public BorderlessEntryRegistration(Action builderAction)
+ {
+ _builderAction = builderAction;
+ }
+
+ internal void RunBuilderAction(BordelessEntryServiceBuilder builder)
+ {
+ _builderAction(builder);
+ }
+ }
+
+ class BordelessEntryServiceBuilder
+ {
+ internal static IMauiHandlersCollection HandlersCollection;
+ internal static readonly Dictionary PendingHandlers = new();
public static void TryAddHandler()
where TType : IView
@@ -21,21 +36,35 @@ public static void TryAddHandler()
else
HandlersCollection.TryAddHandler();
}
+ }
+
+ class BorderlessEntryInitializer : IMauiInitializeService
+ {
+ private readonly IEnumerable _borderlessEntryRegistrations;
- void IMauiServiceBuilder.ConfigureServices(HostBuilderContext context, IServiceCollection services)
+ public BorderlessEntryInitializer(IEnumerable borderlessEntryRegistrations)
{
- // No-op
+ _borderlessEntryRegistrations = borderlessEntryRegistrations;
}
- void IMauiServiceBuilder.Configure(HostBuilderContext context, IServiceProvider services)
+ public void Initialize(IServiceProvider services)
{
- HandlersCollection ??= services.GetRequiredService().GetCollection();
+ var essentialsBuilder = new BordelessEntryServiceBuilder();
+ if (_borderlessEntryRegistrations != null)
+ {
+ foreach (var essentialsRegistration in _borderlessEntryRegistrations)
+ {
+ essentialsRegistration.RunBuilderAction(essentialsBuilder);
+ }
+ }
+
+ BordelessEntryServiceBuilder.HandlersCollection ??= services.GetRequiredService().GetCollection();
- if (PendingHandlers.Count > 0)
+ if (BordelessEntryServiceBuilder.PendingHandlers.Count > 0)
{
- HandlersCollection.TryAddHandlers(PendingHandlers);
- PendingHandlers.Clear();
+ BordelessEntryServiceBuilder.HandlersCollection.TryAddHandlers(BordelessEntryServiceBuilder.PendingHandlers);
+ BordelessEntryServiceBuilder.PendingHandlers.Clear();
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Controls/samples/Controls.Sample/Extensions/EssentialsExtensions.cs b/src/Controls/samples/Controls.Sample/Extensions/EssentialsExtensions.cs
index 136ac74ed9a5..85fcbf6bfa19 100644
--- a/src/Controls/samples/Controls.Sample/Extensions/EssentialsExtensions.cs
+++ b/src/Controls/samples/Controls.Sample/Extensions/EssentialsExtensions.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Maui.Hosting;
@@ -10,18 +11,14 @@ namespace Microsoft.Maui.Essentials
{
public static class EssentialsExtensions
{
- public static IAppHostBuilder ConfigureEssentials(this IAppHostBuilder builder, Action configureDelegate = null)
+ public static MauiAppBuilder ConfigureEssentials(this MauiAppBuilder builder, Action configureDelegate = null)
{
- if (configureDelegate == null)
- builder.ConfigureEssentials((Action)null);
- else
- builder.ConfigureEssentials((_, essentials) => configureDelegate(essentials));
-
- return builder;
- }
+ if (configureDelegate != null)
+ {
+ builder.Services.AddSingleton(new EssentialsRegistration(configureDelegate));
+ }
+ builder.Services.TryAddEnumerable(ServiceDescriptor.Transient());
- public static IAppHostBuilder ConfigureEssentials(this IAppHostBuilder builder, Action configureDelegate = null)
- {
builder.ConfigureLifecycleEvents(life =>
{
#if __ANDROID__
@@ -67,73 +64,59 @@ public static IAppHostBuilder ConfigureEssentials(this IAppHostBuilder builder,
#endif
});
- if (configureDelegate != null)
- builder.ConfigureServices(configureDelegate);
-
return builder;
}
public static IEssentialsBuilder AddAppAction(this IEssentialsBuilder essentials, string id, string title, string subtitle = null, string icon = null) =>
essentials.AddAppAction(new AppAction(id, title, subtitle, icon));
- class EssentialsBuilder : IEssentialsBuilder, IMauiServiceBuilder
+ internal class EssentialsRegistration
{
- readonly List _appActions = new List();
- Action _appActionHandlers;
- bool _trackVersions;
+ private readonly Action _registerEssentials;
-#pragma warning disable CS0414 // Remove unread private members
- bool _useLegaceSecureStorage;
- string _mapServiceToken;
-#pragma warning restore CS0414 // Remove unread private members
-
- public IEssentialsBuilder UseMapServiceToken(string token)
+ public EssentialsRegistration(Action registerEssentials)
{
- _mapServiceToken = token;
- return this;
+ _registerEssentials = registerEssentials;
}
- public IEssentialsBuilder AddAppAction(AppAction appAction)
+ internal void RegisterEssentialsOptions(IEssentialsBuilder essentials)
{
- _appActions.Add(appAction);
- return this;
- }
-
- public IEssentialsBuilder OnAppAction(Action action)
- {
- _appActionHandlers += action;
- return this;
+ _registerEssentials(essentials);
}
+ }
- public IEssentialsBuilder UseVersionTracking()
- {
- _trackVersions = true;
- return this;
- }
+ class EssentialsInitializer : IMauiInitializeService
+ {
+ private readonly IEnumerable _essentialsRegistrations;
+ private EssentialsBuilder _essentialsBuilder;
- public IEssentialsBuilder UseLegacySecureStorage()
+ public EssentialsInitializer(IEnumerable essentialsRegistrations)
{
- _useLegaceSecureStorage = true;
- return this;
+ _essentialsRegistrations = essentialsRegistrations;
}
- public void ConfigureServices(HostBuilderContext context, IServiceCollection services)
+ public async void Initialize(IServiceProvider services)
{
- }
+ _essentialsBuilder = new EssentialsBuilder();
+ if (_essentialsRegistrations != null)
+ {
+ foreach (var essentialsRegistration in _essentialsRegistrations)
+ {
+ essentialsRegistration.RegisterEssentialsOptions(_essentialsBuilder);
+ }
+ }
- public async void Configure(HostBuilderContext context, IServiceProvider services)
- {
#if WINDOWS
- Platform.MapServiceToken = _mapServiceToken;
+ Platform.MapServiceToken = _essentialsBuilder.MapServiceToken;
#elif __ANDROID__
- SecureStorage.LegacyKeyHashFallback = _useLegaceSecureStorage;
+ SecureStorage.LegacyKeyHashFallback = _essentialsBuilder.UseLegaceSecureStorage;
#endif
AppActions.OnAppAction += HandleOnAppAction;
try
{
- await AppActions.SetAsync(_appActions);
+ await AppActions.SetAsync(_essentialsBuilder.AppActions);
}
catch (FeatureNotSupportedException ex)
{
@@ -142,13 +125,55 @@ public async void Configure(HostBuilderContext context, IServiceProvider service
.LogError(ex, "App Actions are not supported on this platform.");
}
- if (_trackVersions)
+ if (_essentialsBuilder.TrackVersions)
VersionTracking.Track();
}
void HandleOnAppAction(object sender, AppActionEventArgs e)
{
- _appActionHandlers?.Invoke(e.AppAction);
+ _essentialsBuilder.AppActionHandlers?.Invoke(e.AppAction);
+ }
+ }
+
+ class EssentialsBuilder : IEssentialsBuilder
+ {
+ internal readonly List AppActions = new List();
+ internal Action AppActionHandlers;
+ internal bool TrackVersions;
+
+#pragma warning disable CS0414 // Remove unread private members
+ internal bool UseLegaceSecureStorage;
+ internal string MapServiceToken;
+#pragma warning restore CS0414 // Remove unread private members
+
+ public IEssentialsBuilder UseMapServiceToken(string token)
+ {
+ MapServiceToken = token;
+ return this;
+ }
+
+ public IEssentialsBuilder AddAppAction(AppAction appAction)
+ {
+ AppActions.Add(appAction);
+ return this;
+ }
+
+ public IEssentialsBuilder OnAppAction(Action action)
+ {
+ AppActionHandlers += action;
+ return this;
+ }
+
+ public IEssentialsBuilder UseVersionTracking()
+ {
+ TrackVersions = true;
+ return this;
+ }
+
+ public IEssentialsBuilder UseLegacySecureStorage()
+ {
+ UseLegaceSecureStorage = true;
+ return this;
}
}
}
diff --git a/src/Controls/samples/Controls.Sample/Startup.cs b/src/Controls/samples/Controls.Sample/Startup.cs
index 91b91498256c..11e183e8d03b 100644
--- a/src/Controls/samples/Controls.Sample/Startup.cs
+++ b/src/Controls/samples/Controls.Sample/Startup.cs
@@ -24,14 +24,17 @@ namespace Maui.Controls.Sample
{
public class CustomButton : Button { }
- public class Startup : IStartup
+ public static class MauiProgram
{
enum PageType { Main, Blazor, Shell, Template }
- readonly PageType _pageType = PageType.Main;
+ readonly static PageType _pageType = PageType.Main;
- public void Configure(IAppHostBuilder appBuilder)
+ public static MauiApp CreateMauiApp()
{
+ var appBuilder = MauiApp.CreateBuilder();
+
appBuilder.UseMauiApp();
+ var services = appBuilder.Services;
appBuilder
.ConfigureMauiHandlers(handlers =>
@@ -48,7 +51,6 @@ public void Configure(IAppHostBuilder appBuilder)
#endif
});
-
// Use a "third party" library that brings in a massive amount of controls
appBuilder.UseBordelessEntry();
appBuilder.ConfigureEffects(builder =>
@@ -60,41 +62,34 @@ public void Configure(IAppHostBuilder appBuilder)
appBuilder.EnableHotReload();
#endif
- appBuilder
- .ConfigureAppConfiguration(config =>
- {
- config.AddInMemoryCollection(new Dictionary
+ appBuilder.Configuration.AddInMemoryCollection(
+ new Dictionary
{
{"MyKey", "Dictionary MyKey Value"},
{":Title", "Dictionary_Title"},
{"Position:Name", "Dictionary_Name" },
{"Logging:LogLevel:Default", "Warning"}
});
- });
#if NET6_0_OR_GREATER
appBuilder
.RegisterBlazorMauiWebView();
+ services.AddBlazorWebView();
#endif
- appBuilder
- .ConfigureServices(services =>
- {
- services.AddLogging(logging =>
- {
+ services.AddLogging(logging =>
+ {
#if WINDOWS
- logging.AddDebug();
+ logging.AddDebug();
#else
- logging.AddConsole();
+ logging.AddConsole();
#endif
- });
+ });
- services.AddSingleton();
- services.AddTransient();
+ services.AddSingleton();
+ services.AddTransient();
-#if NET6_0_OR_GREATER
- services.AddBlazorWebView();
-#endif
+ services.AddTransient();
services.AddTransient(
serviceType: typeof(Page),
@@ -112,8 +107,7 @@ public void Configure(IAppHostBuilder appBuilder)
_ => throw new Exception(),
});
- services.AddTransient();
- })
+ appBuilder
.ConfigureFonts(fonts =>
{
fonts.AddFont("Dokdo-Regular.ttf", "Dokdo");
@@ -218,6 +212,8 @@ static bool LogEvent(string eventName, string type = null)
return true;
}
});
+
+ return appBuilder.Build();
}
}
}
\ No newline at end of file
diff --git a/src/Controls/src/Core/Controls.Core-net6.csproj b/src/Controls/src/Core/Controls.Core-net6.csproj
index 1e9b50e3a9ff..75d5d3b9b772 100644
--- a/src/Controls/src/Core/Controls.Core-net6.csproj
+++ b/src/Controls/src/Core/Controls.Core-net6.csproj
@@ -21,6 +21,15 @@
+
+
+
+
+
+
+
+
+
$(TargetsForTfmSpecificBuildOutput);
diff --git a/src/Controls/src/Core/Controls.Core.csproj b/src/Controls/src/Core/Controls.Core.csproj
index b3a52e955da0..35590f3cad30 100644
--- a/src/Controls/src/Core/Controls.Core.csproj
+++ b/src/Controls/src/Core/Controls.Core.csproj
@@ -32,6 +32,14 @@
+
+
+
+
+
+
+
+
high
diff --git a/src/Controls/src/Core/Hosting/Effects/AppHostBuilderExtensions.cs b/src/Controls/src/Core/Hosting/Effects/AppHostBuilderExtensions.cs
index 4bb6e931ea2e..60cd9d84303c 100644
--- a/src/Controls/src/Core/Hosting/Effects/AppHostBuilderExtensions.cs
+++ b/src/Controls/src/Core/Hosting/Effects/AppHostBuilderExtensions.cs
@@ -1,74 +1,90 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Maui.Controls.Internals;
using Microsoft.Maui.Controls.Platform;
-using Microsoft.Maui.Hosting;
namespace Microsoft.Maui.Controls.Hosting
{
public static partial class AppHostBuilderExtensions
{
- public static IAppHostBuilder ConfigureEffects(this IAppHostBuilder builder, Action configureDelegate)
+ public static MauiAppBuilder ConfigureEffects(this MauiAppBuilder builder, Action configureDelegate)
{
- builder.ConfigureServices(b => configureDelegate(b));
+ builder.Services.TryAddSingleton();
+ if (configureDelegate != null)
+ {
+ builder.Services.AddSingleton(new EffectsRegistration(configureDelegate));
+ }
+
return builder;
}
+ }
- class EffectCollectionBuilder : IMauiServiceBuilder, IEffectsBuilder
+ internal class EffectsRegistration
+ {
+ private readonly Action _registerEffects;
+
+ public EffectsRegistration(Action registerEffects)
{
- internal Dictionary> RegisteredEffects { get; } = new Dictionary>();
+ _registerEffects = registerEffects;
+ }
- public void ConfigureServices(HostBuilderContext context, IServiceCollection services)
- {
- services.AddSingleton();
- }
+ internal void AddEffects(IEffectsBuilder effects)
+ {
+ _registerEffects(effects);
+ }
+ }
- public void Configure(HostBuilderContext context, IServiceProvider services)
- {
- var effectsProvider = services.GetRequiredService();
- effectsProvider.SetRegisteredEffects(RegisteredEffects);
- }
+ internal class EffectCollectionBuilder : IEffectsBuilder
+ {
+ internal Dictionary> RegisteredEffects { get; } = new Dictionary>();
- public IEffectsBuilder Add()
- where TEffect : RoutingEffect
- where TPlatformEffect : PlatformEffect, new()
+ public IEffectsBuilder Add()
+ where TEffect : RoutingEffect
+ where TPlatformEffect : PlatformEffect, new()
+ {
+ RegisteredEffects.Add(typeof(TEffect), () =>
{
- RegisteredEffects.Add(typeof(TEffect), () =>
- {
- if (DependencyResolver.Resolve(typeof(TPlatformEffect)) is TPlatformEffect pe)
- return pe;
+ if (DependencyResolver.Resolve(typeof(TPlatformEffect)) is TPlatformEffect pe)
+ return pe;
- return new TPlatformEffect();
- });
- return this;
- }
+ return new TPlatformEffect();
+ });
+ return this;
+ }
- public IEffectsBuilder Add(Type TEffect, Type TPlatformEffect)
+ public IEffectsBuilder Add(Type TEffect, Type TPlatformEffect)
+ {
+ RegisteredEffects.Add(TEffect, () =>
{
- RegisteredEffects.Add(TEffect, () =>
- {
- return (PlatformEffect)DependencyResolver.ResolveOrCreate(TPlatformEffect);
- });
+ return (PlatformEffect)DependencyResolver.ResolveOrCreate(TPlatformEffect);
+ });
- return this;
- }
+ return this;
}
}
internal class EffectsFactory
{
- Dictionary> _registeredEffects;
+ private readonly Dictionary> _registeredEffects;
- internal void SetRegisteredEffects(Dictionary> registeredEffects)
+ public EffectsFactory(IEnumerable effectsRegistrations)
{
- _registeredEffects = registeredEffects;
+ if (effectsRegistrations != null)
+ {
+ var effectsBuilder = new EffectCollectionBuilder();
+ foreach (var effectRegistration in effectsRegistrations)
+ {
+ effectRegistration.AddEffects(effectsBuilder);
+ }
+ _registeredEffects = effectsBuilder.RegisteredEffects;
+ }
}
internal PlatformEffect CreateEffect(Effect fromEffect)
{
- if (_registeredEffects.TryGetValue(fromEffect.GetType(), out Func effectType))
+ if (_registeredEffects != null && _registeredEffects.TryGetValue(fromEffect.GetType(), out Func effectType))
{
return effectType();
}
diff --git a/src/Controls/tests/Core.UnitTests/HostBuilderAppTests.cs b/src/Controls/tests/Core.UnitTests/HostBuilderAppTests.cs
index 42719bc4f72b..9d4756a9f551 100644
--- a/src/Controls/tests/Core.UnitTests/HostBuilderAppTests.cs
+++ b/src/Controls/tests/Core.UnitTests/HostBuilderAppTests.cs
@@ -1,10 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Maui.Controls;
-using Microsoft.Maui.Controls.Core;
using Microsoft.Maui.Controls.Hosting;
-using Microsoft.Maui.Handlers;
-using Microsoft.Maui.Hosting;
-using NUnit;
using NUnit.Framework;
namespace Microsoft.Maui.Controls.Core.UnitTests
@@ -15,34 +10,34 @@ public class HostBuilderAppTests
[Test]
public void UseMauiAppRegistersApp()
{
- var host = new AppHostBuilder()
+ var mauiApp = MauiApp.CreateBuilder()
.UseMauiApp()
.Build();
- var app = (ApplicationStub)host.Services.GetRequiredService();
+ var app = (ApplicationStub)mauiApp.Services.GetRequiredService();
Assert.AreEqual("Default", app.Property);
}
[Test]
public void UseMauiAppRegistersAppWithFactory()
{
- var host = new AppHostBuilder()
+ var mauiApp = MauiApp.CreateBuilder()
.UseMauiApp(services => new ApplicationStub { Property = "Factory" })
.Build();
- var app = (ApplicationStub)host.Services.GetRequiredService();
+ var app = (ApplicationStub)mauiApp.Services.GetRequiredService();
Assert.AreEqual("Factory", app.Property);
}
[Test]
public void UseMauiAppRegistersSingleton()
{
- var host = new AppHostBuilder()
+ var mauiApp = MauiApp.CreateBuilder()
.UseMauiApp()
.Build();
- var app1 = host.Services.GetRequiredService();
- var app2 = host.Services.GetRequiredService();
+ var app1 = mauiApp.Services.GetRequiredService();
+ var app2 = mauiApp.Services.GetRequiredService();
Assert.AreEqual(app1, app2);
}
diff --git a/src/Controls/tests/Core.UnitTests/HostBuilderHandlerTests.cs b/src/Controls/tests/Core.UnitTests/HostBuilderHandlerTests.cs
index a2aabaf0617a..438fc82d85b5 100644
--- a/src/Controls/tests/Core.UnitTests/HostBuilderHandlerTests.cs
+++ b/src/Controls/tests/Core.UnitTests/HostBuilderHandlerTests.cs
@@ -1,10 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Maui.Controls;
-using Microsoft.Maui.Controls.Core;
using Microsoft.Maui.Controls.Hosting;
using Microsoft.Maui.Handlers;
using Microsoft.Maui.Hosting;
-using NUnit;
using NUnit.Framework;
namespace Microsoft.Maui.Controls.Core.UnitTests
@@ -15,11 +12,14 @@ public class HostBuilderHandlerTests
[Test]
public void DefaultHandlersAreRegistered()
{
- var host = new AppHostBuilder()
+ var mauiApp = MauiApp.CreateBuilder()
.UseMauiApp()
.Build();
- var handler = host.Handlers.GetHandler(typeof(Button));
+ Assert.NotNull(mauiApp.Services);
+ var handlers = mauiApp.Services.GetRequiredService();
+ Assert.NotNull(handlers);
+ var handler = handlers.GetHandler(typeof(Button));
Assert.NotNull(handler);
Assert.AreEqual(handler.GetType(), typeof(ButtonHandler));
@@ -28,12 +28,16 @@ public void DefaultHandlersAreRegistered()
[Test]
public void CanSpecifyHandler()
{
- var host = new AppHostBuilder()
+ var mauiApp = MauiApp.CreateBuilder()
.UseMauiApp()
- .ConfigureMauiHandlers((_, handlers) => handlers.AddHandler