using System.Windows; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Waaagh.Models; using Waaagh.Services.Abstract; using Waaagh.ViewModels; using Waaagh.Views; namespace Waaagh { public class Program { [STAThread] static public void Main(string[] args) { SQLitePCL.Batteries.Init(); IHost host = CreateHostBuilder(args).Build(); host.Start(); Application application = host.Services.GetRequiredService(); #if DEBUG // DbTest(host); #endif application.Run(); } static private IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddDbContextFactory((sp, options) => { IConfiguration configuration = sp.GetRequiredService(); string? sqliteConnectionString = configuration.GetConnectionString("Default"); if (string.IsNullOrWhiteSpace(sqliteConnectionString)) { throw new Exception("Configuration Database Connection String Error."); } options.UseSqlite(sqliteConnectionString); }); }) .AddDefaultMessageManager() .AddDefaultMessageCatcher() .AddDefaultScenarioManager() .ConfigureServices(services => { // MainWindow services.AddSingleton(); services.AddSingleton(sp => { return new MainWindow() { DataContext = sp.GetRequiredService() }; }); }) .ConfigureServices(services => { // Application services.AddSingleton(sp => { Application application = new Application() { MainWindow = sp.GetRequiredService(), }; application.Startup += (s, e) => { if (s is Application application) { application.MainWindow.Show(); } }; return application; }); }); } static public void DbTest(IHost host) { IDbContextFactory factory = host.Services.GetRequiredService>(); AppDatabaseContext context = factory.CreateDbContext(); { Scenario scenario = new Scenario() { Id = 1, Name = "Test" }; if (context.Scenarios.Contains(scenario) == false) { context.Scenarios.Add(scenario); } else { scenario.IsLegacy = true; context.Scenarios.Update(scenario); } context.SaveChanges(); } foreach (Scenario scenario in context.Scenarios) { Console.WriteLine($"{scenario.Name}-{scenario.Id}<{scenario.IsLegacy}>: {scenario.Description}."); } } } }