diff --git a/.github/workflows/build_maui.yml b/.github/workflows/build_maui.yml
index 1359ee0496..8198eb6279 100644
--- a/.github/workflows/build_maui.yml
+++ b/.github/workflows/build_maui.yml
@@ -24,3 +24,5 @@ jobs:
with:
name: Build Prism.Maui
solution-path: PrismLibrary_Maui.slnf
+ dotnet-version: 8.0.x
+ install-workload: maui maui-tizen
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 1029c9c65c..2ea1b222d7 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -7,6 +7,12 @@
+
+
+
+
+
+
diff --git a/e2e/Maui/Directory.Build.props b/e2e/Maui/Directory.Build.props
index 6c745209c5..ff24e3e603 100644
--- a/e2e/Maui/Directory.Build.props
+++ b/e2e/Maui/Directory.Build.props
@@ -1,5 +1,6 @@
enable
+ true
-
\ No newline at end of file
+
diff --git a/e2e/Maui/MauiModule/MauiModule.csproj b/e2e/Maui/MauiModule/MauiModule.csproj
index 88fa1fc448..f921ebcbb1 100644
--- a/e2e/Maui/MauiModule/MauiModule.csproj
+++ b/e2e/Maui/MauiModule/MauiModule.csproj
@@ -1,11 +1,16 @@
- net7.0
+ net8.0
false
true
+
+
+
+
+
diff --git a/e2e/Maui/MauiRegionsModule/MauiRegionsModule.csproj b/e2e/Maui/MauiRegionsModule/MauiRegionsModule.csproj
index 6693df4581..1ed5e6545c 100644
--- a/e2e/Maui/MauiRegionsModule/MauiRegionsModule.csproj
+++ b/e2e/Maui/MauiRegionsModule/MauiRegionsModule.csproj
@@ -1,12 +1,16 @@
- net7.0
- enable
- enable
+ net8.0
+ false
true
+
+
+
+
+
diff --git a/e2e/Maui/PrismMauiDemo.sln b/e2e/Maui/PrismMauiDemo.sln
index 4e651af936..368a99bad4 100644
--- a/e2e/Maui/PrismMauiDemo.sln
+++ b/e2e/Maui/PrismMauiDemo.sln
@@ -31,6 +31,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core.Tests", "..\..\t
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Events", "..\..\src\Prism.Events\Prism.Events.csproj", "{5623CB62-59C1-49BC-BB16-4C5D63D82DAC}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{16C4C33B-CC0F-4FA4-A117-B9EF161CB7B8}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Directory.Packages.props = ..\..\Directory.Packages.props
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
diff --git a/e2e/Maui/PrismMauiDemo/App.xaml b/e2e/Maui/PrismMauiDemo/App.xaml
index 1823087893..008e5137ab 100644
--- a/e2e/Maui/PrismMauiDemo/App.xaml
+++ b/e2e/Maui/PrismMauiDemo/App.xaml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/e2e/Maui/PrismMauiDemo/PrismMauiDemo.csproj b/e2e/Maui/PrismMauiDemo/PrismMauiDemo.csproj
index f5fc7634b0..dd714efaba 100644
--- a/e2e/Maui/PrismMauiDemo/PrismMauiDemo.csproj
+++ b/e2e/Maui/PrismMauiDemo/PrismMauiDemo.csproj
@@ -1,13 +1,14 @@
- net7.0-android;net7.0-ios;net7.0-maccatalyst
- $(TargetFrameworks);net7.0-windows10.0.19041
+ net8.0-android;net8.0-ios;net8.0-maccatalyst
+ $(TargetFrameworks);net8.0-windows10.0.19041
Exe
PrismMauiDemo
true
true
true
+ Platforms/Android/AndroidManifest.xml
Prism Maui
@@ -49,6 +50,11 @@
+
+
+
+
+
diff --git a/global.json b/global.json
index f159fe6885..0385fde5c2 100644
--- a/global.json
+++ b/global.json
@@ -1,8 +1,4 @@
{
- "sdk": {
- "rollForward": "latestMinor",
- "allowPrerelease": false
- },
"msbuild-sdks": {
"MSBuild.Sdk.Extras": "3.0.44"
}
diff --git a/src/Maui/Prism.DryIoc.Maui/Prism.DryIoc.Maui.csproj b/src/Maui/Prism.DryIoc.Maui/Prism.DryIoc.Maui.csproj
index b16285c2d5..c57e3b3fde 100644
--- a/src/Maui/Prism.DryIoc.Maui/Prism.DryIoc.Maui.csproj
+++ b/src/Maui/Prism.DryIoc.Maui/Prism.DryIoc.Maui.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net8.0
true
true
true
@@ -10,6 +10,8 @@
+
+
diff --git a/src/Maui/Prism.Maui.Rx/Prism.Maui.Rx.csproj b/src/Maui/Prism.Maui.Rx/Prism.Maui.Rx.csproj
index 78eab582b7..c04f7175a4 100644
--- a/src/Maui/Prism.Maui.Rx/Prism.Maui.Rx.csproj
+++ b/src/Maui/Prism.Maui.Rx/Prism.Maui.Rx.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net8.0
true
Prism.Maui.Rx is a support package for .NET MAUI developers. This package provides some helpers to access an IObservable for globally handling Navigation Request Results.
true
@@ -13,6 +13,8 @@
+
+
diff --git a/src/Maui/Prism.Maui/Navigation/IWindowManager.cs b/src/Maui/Prism.Maui/Navigation/IWindowManager.cs
index e6b8366d31..b51b715598 100644
--- a/src/Maui/Prism.Maui/Navigation/IWindowManager.cs
+++ b/src/Maui/Prism.Maui/Navigation/IWindowManager.cs
@@ -8,4 +8,3 @@ public interface IWindowManager
void OpenWindow(Window window);
void CloseWindow(Window window);
}
-
diff --git a/src/Maui/Prism.Maui/Navigation/PrismWindowManager.cs b/src/Maui/Prism.Maui/Navigation/PrismWindowManager.cs
new file mode 100644
index 0000000000..8c2390cf8b
--- /dev/null
+++ b/src/Maui/Prism.Maui/Navigation/PrismWindowManager.cs
@@ -0,0 +1,43 @@
+namespace Prism.Navigation;
+
+internal sealed class PrismWindowManager : IWindowCreator, IWindowManager
+{
+ private IApplication _application { get; }
+
+ public PrismWindowManager(IApplication application)
+ {
+ _application = application;
+ }
+
+ private Window _initialWindow;
+
+ public IReadOnlyList Windows => _application.Windows.OfType().ToList();
+
+ public Window CreateWindow(Application app, IActivationState activationState)
+ {
+ if (_initialWindow is not null)
+ return _initialWindow;
+ else if (app.Windows.OfType().Any())
+ return _initialWindow = app.Windows.OfType().First();
+
+ activationState.Context.Services.GetRequiredService().OnAppStarted();
+
+ return _initialWindow ?? throw new InvalidNavigationException("Expected Navigation Failed. No Root Window has been created.");
+ }
+
+ public void OpenWindow(Window window)
+ {
+ if (_initialWindow is null)
+ _initialWindow = window;
+ else
+ _application.OpenWindow(window);
+ }
+
+ public void CloseWindow(Window window)
+ {
+ if (_initialWindow == window)
+ _initialWindow = null;
+
+ _application.CloseWindow(window);
+ }
+}
diff --git a/src/Maui/Prism.Maui/Prism.Maui.csproj b/src/Maui/Prism.Maui/Prism.Maui.csproj
index c9aea435e7..1e5b20ded5 100644
--- a/src/Maui/Prism.Maui/Prism.Maui.csproj
+++ b/src/Maui/Prism.Maui/Prism.Maui.csproj
@@ -1,8 +1,8 @@
- net7.0;net7.0-android33.0
- $(TargetFrameworks);net7.0-windows10.0.19041
+ net8.0;net8.0-android
+ $(TargetFrameworks);net8.0-windows10.0.19041
Prism
true
true
@@ -13,6 +13,11 @@
+
+
+
+
+
diff --git a/src/Maui/Prism.Maui/PrismAppBuilder.cs b/src/Maui/Prism.Maui/PrismAppBuilder.cs
index 0a6b9a2e14..357f46300a 100644
--- a/src/Maui/Prism.Maui/PrismAppBuilder.cs
+++ b/src/Maui/Prism.Maui/PrismAppBuilder.cs
@@ -230,15 +230,7 @@ private void RegisterDefaultRequiredTypes(IContainerRegistry containerRegistry)
containerRegistry.RegisterScoped();
containerRegistry.RegisterScoped();
containerRegistry.Register();
- containerRegistry.Register(c =>
- {
- var app = c.Resolve();
- if (app is PrismApplication prismApp)
- return prismApp;
-
- throw new InvalidOperationException("The registered application does not inherit from PrismApplication.");
- });
-
+ containerRegistry.RegisterManySingleton();
containerRegistry.RegisterPageBehavior();
containerRegistry.RegisterPageBehavior();
containerRegistry.RegisterPageBehavior();
diff --git a/src/Maui/Prism.Maui/PrismApplication.cs b/src/Maui/Prism.Maui/PrismApplication.cs
deleted file mode 100644
index 15b319fa21..0000000000
--- a/src/Maui/Prism.Maui/PrismApplication.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using Prism.Navigation;
-
-namespace Prism;
-
-public class PrismApplication : Application, IWindowManager
-{
- private Window _initialWindow;
-
- protected sealed override Window CreateWindow(IActivationState activationState)
- {
- if (_initialWindow is not null)
- return _initialWindow;
- else if (Windows.OfType().Any())
- return _initialWindow = Windows.OfType().First();
-
- activationState.Context.Services.GetRequiredService().OnAppStarted();
-
- return _initialWindow ?? throw new InvalidNavigationException("Expected Navigation Failed. No Root Window has been created.");
- }
-
- void IWindowManager.OpenWindow(Window window)
- {
- if (_initialWindow is null)
- _initialWindow = window;
- else
- OpenWindow(window);
- }
-}
-
diff --git a/tests/Maui/Prism.DryIoc.Maui.Tests/Fixtures/TestBase.cs b/tests/Maui/Prism.DryIoc.Maui.Tests/Fixtures/TestBase.cs
index 44d51c9064..b04ac2e9e6 100644
--- a/tests/Maui/Prism.DryIoc.Maui.Tests/Fixtures/TestBase.cs
+++ b/tests/Maui/Prism.DryIoc.Maui.Tests/Fixtures/TestBase.cs
@@ -21,7 +21,7 @@ protected TestBase(ITestOutputHelper testOutputHelper)
protected MauiAppBuilder CreateBuilder(Action configurePrism)
{
return MauiApp.CreateBuilder()
- .UseMauiApp()
+ .UseMauiApp()
.UsePrism(prism =>
{
prism.RegisterTypes(container =>
@@ -68,7 +68,7 @@ protected Window GetWindow(MauiApp mauiApp)
{
var app = mauiApp.Services.GetService();
Assert.NotNull(app);
- Assert.IsType(app);
+ Assert.IsType(app);
var state = new ActivationState(new MauiContext(mauiApp.Services));
var window = app.CreateWindow(state);
diff --git a/tests/Maui/Prism.DryIoc.Maui.Tests/Prism.DryIoc.Maui.Tests.csproj b/tests/Maui/Prism.DryIoc.Maui.Tests/Prism.DryIoc.Maui.Tests.csproj
index 8cbeba3d82..15d1c2b6cc 100644
--- a/tests/Maui/Prism.DryIoc.Maui.Tests/Prism.DryIoc.Maui.Tests.csproj
+++ b/tests/Maui/Prism.DryIoc.Maui.Tests/Prism.DryIoc.Maui.Tests.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net8.0
@@ -9,6 +9,8 @@
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/tests/Maui/Prism.Maui.Tests/Fixtures/Behaviors/EventToCommandBehaviorFixture.cs b/tests/Maui/Prism.Maui.Tests/Fixtures/Behaviors/EventToCommandBehaviorFixture.cs
index b892f0e681..ed8c52b26a 100644
--- a/tests/Maui/Prism.Maui.Tests/Fixtures/Behaviors/EventToCommandBehaviorFixture.cs
+++ b/tests/Maui/Prism.Maui.Tests/Fixtures/Behaviors/EventToCommandBehaviorFixture.cs
@@ -39,7 +39,7 @@ public EventToCommandBehaviorFixture()
{
DispatcherProvider.SetCurrent(TestDispatcher.Provider);
_ = MauiApp.CreateBuilder()
- .UseMauiApp()
+ .UseMauiApp()
.Build();
}
diff --git a/tests/Maui/Prism.Maui.Tests/Mocks/ApplicationMock.cs b/tests/Maui/Prism.Maui.Tests/Mocks/ApplicationMock.cs
deleted file mode 100644
index bfea0d7fb6..0000000000
--- a/tests/Maui/Prism.Maui.Tests/Mocks/ApplicationMock.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.Maui;
-using Microsoft.Maui.Controls;
-
-namespace Prism.Maui.Tests.Mocks;
-
-public class ApplicationMock : IApplication
-{
- private List _windows = new List { new Window() };
-
- private Window _currentWindow => _windows.Cast().FirstOrDefault();
-
- public ApplicationMock(Page page = null)
- {
- if (page != null)
- _currentWindow.Page = page;
- }
-
- public Page MainPage => _currentWindow?.Page;
-
- public IReadOnlyList Windows => _windows;
- public IElementHandler Handler { get; set; }
- public IElement Parent { get; }
-
- public void CloseWindow(IWindow window)
- {
- if (!_windows.Contains(window))
- throw new Exception("Application doesn't contain this window");
-
- _windows.Remove(window);
- }
-
- public IWindow CreateWindow(IActivationState activationState)
- {
- throw new NotImplementedException();
- }
-
- public void OpenWindow(IWindow window)
- {
- if (_windows.Contains(window))
- throw new Exception("Application already has this window");
-
- _windows.Add(window);
- }
-
- public void ThemeChanged()
- {
- throw new NotImplementedException();
- }
-}
diff --git a/tests/Maui/Prism.Maui.Tests/Prism.Maui.Tests.csproj b/tests/Maui/Prism.Maui.Tests/Prism.Maui.Tests.csproj
index 40c5b6fecf..cbe666aa83 100644
--- a/tests/Maui/Prism.Maui.Tests/Prism.Maui.Tests.csproj
+++ b/tests/Maui/Prism.Maui.Tests/Prism.Maui.Tests.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net8.0
@@ -10,6 +10,8 @@
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive