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