Make ViewManager request the list of views on each show operation. Allows view registration after ViewManager creation

This commit is contained in:
2025-08-01 20:05:28 +02:00
parent 77a061bd35
commit 0cb98b01cc
2 changed files with 7 additions and 5 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>0.2.0</Version>
<Version>0.2.1</Version>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
+6 -4
View File
@@ -1,12 +1,13 @@
using TrailBlazr.Models;
using Microsoft.Extensions.DependencyInjection;
using TrailBlazr.Models;
using TrailBlazr.ViewModels;
using TrailBlazr.Views;
namespace TrailBlazr.Services;
public sealed class ViewManager(
IEnumerable<ViewRegistration> viewRegistrations) : IViewManager
IServiceProvider serviceProvider) : IViewManager
{
private readonly List<ViewRegistration> viewRegistrations = [.. viewRegistrations];
private readonly IServiceProvider serviceProvider = serviceProvider;
public event EventHandler<ViewRequest>? ShowViewRequested;
@@ -25,7 +26,8 @@ public sealed class ViewManager(
private void ShowViewInner(Type viewType, object? dataContext = null)
{
if (this.viewRegistrations.FirstOrDefault(r => r.ViewType == viewType) is not ViewRegistration registration)
var viewRegistrations = this.serviceProvider.GetServices<ViewRegistration>();
if (viewRegistrations.FirstOrDefault(r => r.ViewType == viewType) is not ViewRegistration registration)
{
throw new InvalidOperationException("View type not registered: " + viewType.FullName);
}