Reloadable configuration, FontService (WIP)

This commit is contained in:
2023-02-22 16:50:50 +01:00
parent d6022ee02c
commit 3db5945cfd
18 changed files with 166 additions and 41 deletions

View File

@@ -2,6 +2,7 @@ using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using FileTime.App.DependencyInjection;
using FileTime.GuiApp.Font;
using FileTime.GuiApp.ViewModels;
using FileTime.GuiApp.Views;
using Microsoft.Extensions.DependencyInjection;
@@ -13,9 +14,11 @@ public partial class App : Application
{
static App()
{
DI.ServiceProvider ??= DependencyInjection
var configuration = Startup.CreateConfiguration();
DI.ServiceProvider = DependencyInjection
.RegisterDefaultServices()
.AddConfiguration()
.AddConfiguration(configuration)
.ConfigureFont(configuration)
.RegisterLogging()
.RegisterServices()
.AddViewModels()

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0</TargetFramework>
@@ -25,11 +25,11 @@
<TrimmableAssembly Include="Avalonia.Themes.Default" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.0-preview4" />
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview4" />
<PackageReference Include="Avalonia" Version="11.0.0-preview5" />
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview5" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview4" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0-preview4" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview5" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0-preview5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
@@ -42,6 +42,7 @@
<ProjectReference Include="..\..\..\AppCommon\FileTime.App.Core\FileTime.App.Core.csproj" />
<ProjectReference Include="..\..\..\AppCommon\FileTime.App.DependencyInjection\FileTime.App.DependencyInjection.csproj" />
<ProjectReference Include="..\FileTime.GuiApp.CustomImpl\FileTime.GuiApp.CustomImpl.csproj" />
<ProjectReference Include="..\FileTime.GuiApp.Font\FileTime.GuiApp.Font.csproj" />
<ProjectReference Include="..\FileTime.GuiApp\FileTime.GuiApp.csproj" />
</ItemGroup>

View File

@@ -20,6 +20,25 @@ namespace FileTime.GuiApp.App;
public static class Startup
{
internal static IConfigurationRoot CreateConfiguration()
{
var configurationBuilder = new ConfigurationBuilder()
.AddInMemoryCollection(MainConfiguration.Configuration)
.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{Program.EnvironmentName}.json", true);
var configurationDirectory = new DirectoryInfo(Path.Combine(Program.AppDataRoot, "config"));
if (configurationDirectory.Exists)
{
foreach (var settingsFile in configurationDirectory.GetFiles("*.json"))
{
configurationBuilder.AddJsonFile(settingsFile.FullName, optional: true, reloadOnChange: true);
}
}
return configurationBuilder.Build();
}
internal static IServiceCollection AddViewModels(this IServiceCollection serviceCollection)
{
serviceCollection.TryAddSingleton<MainWindowViewModel>();
@@ -69,14 +88,8 @@ public static class Startup
);
}
internal static IServiceCollection AddConfiguration(this IServiceCollection serviceCollection)
internal static IServiceCollection AddConfiguration(this IServiceCollection serviceCollection, IConfigurationRoot configuration)
{
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(MainConfiguration.Configuration)
.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{Program.EnvironmentName}.json", true)
.Build();
return serviceCollection
.Configure<ProgramsConfiguration>(configuration.GetSection(SectionNames.ProgramsSectionName))
.Configure<KeyBindingConfiguration>(configuration.GetSection(SectionNames.KeybindingSectionName))