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); }); }); }