using CommunityToolkit.Mvvm.Messaging;
using MaterialDesignThemes.Wpf;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Windows;
using System.Windows.Threading;
namespace LD_SysInfo;
///
/// Interaction logic for App.xaml
///
public partial class App : Application
{
[STAThread]
private static void Main(string[] args)
{
MainAsync(args).GetAwaiter().GetResult();
}
private static async Task MainAsync(string[] args)
{
using IHost host = CreateHostBuilder(args).Build();
await host.StartAsync().ConfigureAwait(true);
App app = new();
app.InitializeComponent();
app.MainWindow = host.Services.GetRequiredService();
app.MainWindow.Visibility = Visibility.Visible;
app.Run();
await host.StopAsync().ConfigureAwait(true);
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostBuilderContext, configurationBuilder)
=> configurationBuilder.AddUserSecrets(typeof(App).Assembly))
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton(provider => provider.GetRequiredService());
services.AddSingleton(_ => Current.Dispatcher);
services.AddTransient(provider =>
{
Dispatcher dispatcher = provider.GetRequiredService();
return new SnackbarMessageQueue(TimeSpan.FromSeconds(3.0), dispatcher);
});
});
}