From ea4b96886b43a7c5128fc57e6ebfd20957487821 Mon Sep 17 00:00:00 2001 From: Daniel Clark Date: Sat, 17 Dec 2022 17:58:42 +0000 Subject: [PATCH] Configutation writer fixed --- .../Avalonia/Contents/ContentTemplateSelector.cs | 12 ++++++++---- Framework/Avalonia/Navigation/NavigateHandler.cs | 9 --------- .../Foundation/Configurations/ConfigurationWriter.cs | 9 +++++++-- .../Configurations/IConfigurationWriter.cs | 2 +- .../WritableJsonConfigurationProvider.cs | 1 + .../WritableJsonConfigurationSource.cs | 2 +- Framework/Foundation/Configurations/Write.cs | 2 +- Framework/Foundation/Configurations/WriteHandler.cs | 2 +- .../Extensions/IServiceCollectionExtensions.cs | 4 ++-- .../WritableJsonConfigurationExtensions.cs | 5 +++-- Framework/Foundation/Foundation.csproj | 2 ++ 11 files changed, 27 insertions(+), 23 deletions(-) rename Framework/Foundation/{Configurations => Extensions}/WritableJsonConfigurationExtensions.cs (94%) diff --git a/Framework/Avalonia/Contents/ContentTemplateSelector.cs b/Framework/Avalonia/Contents/ContentTemplateSelector.cs index f0c3dbc..5aaa825 100644 --- a/Framework/Avalonia/Contents/ContentTemplateSelector.cs +++ b/Framework/Avalonia/Contents/ContentTemplateSelector.cs @@ -15,16 +15,20 @@ public class ContentTemplateSelector : IDataTemplate, IContentTemplateSelector this.templateFactory = templateFactory; } - public IControl? Build(object? item) + public IControl? Build(object? content) { - if (item is not null) + if (content is not null) { - if (dataTracking.TryGetValue(item, out IControl? control)) + if (dataTracking.TryGetValue(content, out IControl? control)) { return control; } + else + { + control = (IControl?)templateFactory.Create(content); + } - return (IControl?)templateFactory.Create(item); + return control; } return null; diff --git a/Framework/Avalonia/Navigation/NavigateHandler.cs b/Framework/Avalonia/Navigation/NavigateHandler.cs index 2631e83..1bc580c 100644 --- a/Framework/Avalonia/Navigation/NavigateHandler.cs +++ b/Framework/Avalonia/Navigation/NavigateHandler.cs @@ -1,7 +1,6 @@ using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Mediator; -using System.Diagnostics; using Toolkit.Framework.Foundation; namespace Toolkit.Framework.Avalonia; @@ -92,14 +91,6 @@ public class NavigateHandler : IRequestHandler { hasNavigated = await mediator.Send(new ContentControlNavigation(contentControl, content, template, keyedParameters)); } - - if (hasNavigated) - { - if (content is INavigated navigated) - { - await navigated.Navigated(); - } - } } else { diff --git a/Framework/Foundation/Configurations/ConfigurationWriter.cs b/Framework/Foundation/Configurations/ConfigurationWriter.cs index 215fde5..cde7b85 100644 --- a/Framework/Foundation/Configurations/ConfigurationWriter.cs +++ b/Framework/Foundation/Configurations/ConfigurationWriter.cs @@ -1,17 +1,22 @@ using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Options; +using System.Diagnostics; namespace Toolkit.Framework.Foundation; public class ConfigurationWriter : IConfigurationWriter where TConfiguration : class, new() { private readonly IConfiguration rootConfiguration; + private readonly string section; - public ConfigurationWriter(IConfiguration rootConfiguration) + public ConfigurationWriter(IConfiguration rootConfiguration, string section) { + Trace.WriteLine(section); this.rootConfiguration = rootConfiguration; + this.section = section; } - public void Write(string section, TConfiguration configuration) + public void Write(TConfiguration configuration) { if (rootConfiguration is IConfigurationRoot root) { diff --git a/Framework/Foundation/Configurations/IConfigurationWriter.cs b/Framework/Foundation/Configurations/IConfigurationWriter.cs index bd4888b..866660c 100644 --- a/Framework/Foundation/Configurations/IConfigurationWriter.cs +++ b/Framework/Foundation/Configurations/IConfigurationWriter.cs @@ -2,5 +2,5 @@ public interface IConfigurationWriter where TConfiguration : class { - void Write(string section, TConfiguration args); + void Write(TConfiguration args); } \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs index 868c7ba..9ca9f45 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs @@ -9,6 +9,7 @@ public class WritableJsonConfigurationProvider : JsonConfigurationProvider, IWri { public WritableJsonConfigurationProvider(JsonConfigurationSource source) : base(source) { + } public void Write(string section, TValue value) where TValue : class, new() diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs index fcfa1a3..f0a9cc7 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs @@ -20,7 +20,7 @@ public class WritableJsonConfigurationSource : JsonConfigurationSource if (FileProvider is PhysicalFileProvider physicalFileProvider) { - string? outputFile = System.IO.Path.Combine(physicalFileProvider.Root, Path); + string? outputFile = System.IO.Path.Combine(physicalFileProvider.Root, Path!); Factory?.Build(outputFile); } } diff --git a/Framework/Foundation/Configurations/Write.cs b/Framework/Foundation/Configurations/Write.cs index 8e05d0a..8bebf84 100644 --- a/Framework/Foundation/Configurations/Write.cs +++ b/Framework/Foundation/Configurations/Write.cs @@ -2,4 +2,4 @@ namespace Toolkit.Framework.Foundation; -public abstract record Write(string Section, Action UpdateDelegate) : IRequest where TConfiguration : class; \ No newline at end of file +public record Write(Action UpdateDelegate) : IRequest where TConfiguration : class; \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WriteHandler.cs b/Framework/Foundation/Configurations/WriteHandler.cs index dafe029..14c00fb 100644 --- a/Framework/Foundation/Configurations/WriteHandler.cs +++ b/Framework/Foundation/Configurations/WriteHandler.cs @@ -20,7 +20,7 @@ public class WriteHandler : IRequestHandler Handle(Write request, CancellationToken cancellationToken) { request.UpdateDelegate.Invoke(configuration); - writer.Write(request.Section, configuration); + writer.Write(configuration); await mediator.Send(new ConfigurationChanged(configuration), cancellationToken); diff --git a/Framework/Foundation/Extensions/IServiceCollectionExtensions.cs b/Framework/Foundation/Extensions/IServiceCollectionExtensions.cs index 9371ec3..e3ddb71 100644 --- a/Framework/Foundation/Extensions/IServiceCollectionExtensions.cs +++ b/Framework/Foundation/Extensions/IServiceCollectionExtensions.cs @@ -105,11 +105,11 @@ public static class IServiceCollectionExtensions public static IServiceCollection AddWritableConfiguration(this IServiceCollection serviceCollection, IConfiguration configuration) where TConfiguration : class, new() { serviceCollection.Configure(configuration); - serviceCollection.AddTransient, ConfigurationWriter>(); + serviceCollection.AddTransient>(provider => provider.GetService()?.Create< ConfigurationWriter>(configuration is IConfigurationSection section ? section.Path : "")!); serviceCollection.AddTransient(provider => provider.GetService>()!.CurrentValue); serviceCollection.AddHandler>(); serviceCollection.AddTransient>(); - + return serviceCollection; } } \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs b/Framework/Foundation/Extensions/WritableJsonConfigurationExtensions.cs similarity index 94% rename from Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs rename to Framework/Foundation/Extensions/WritableJsonConfigurationExtensions.cs index 1094ba6..8d4011b 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs +++ b/Framework/Foundation/Extensions/WritableJsonConfigurationExtensions.cs @@ -1,11 +1,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; namespace Toolkit.Framework.Foundation; public static class WritableJsonConfigurationExtensions { - public static IConfigurationBuilder AddWritableJsonFile(this IConfigurationBuilder builder, + public static IConfigurationBuilder AddWritableJsonFile(this IConfigurationBuilder builder, string path) { return builder.AddWritableJsonFile(null, path, false, false, null); @@ -38,7 +39,7 @@ public static class WritableJsonConfigurationExtensions bool optional, bool reloadOnChange) { - return builder.AddWritableJsonFile(null, path, optional, reloadOnChange, null); + return builder.AddWritableJsonFile( null, path, optional, reloadOnChange, null); } public static IConfigurationBuilder AddWritableJsonFile(this IConfigurationBuilder builder, diff --git a/Framework/Foundation/Foundation.csproj b/Framework/Foundation/Foundation.csproj index 5357ee8..9e02892 100644 --- a/Framework/Foundation/Foundation.csproj +++ b/Framework/Foundation/Foundation.csproj @@ -9,6 +9,8 @@ + +