Program.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System.Windows;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.Extensions.Configuration;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.Hosting;
  6. using Waaagh.Models;
  7. using Waaagh.Services.Abstract;
  8. using Waaagh.ViewModels;
  9. using Waaagh.Views;
  10. namespace Waaagh {
  11. public class Program {
  12. [STAThread]
  13. static public void Main(string[] args) {
  14. SQLitePCL.Batteries.Init();
  15. IHost host = CreateHostBuilder(args).Build();
  16. host.Start();
  17. Application application = host.Services.GetRequiredService<Application>();
  18. #if DEBUG
  19. // DbTest(host);
  20. #endif
  21. application.Run();
  22. }
  23. static private IHostBuilder CreateHostBuilder(string[] args) {
  24. return Host.CreateDefaultBuilder(args)
  25. .ConfigureServices(services => {
  26. services.AddDbContextFactory<AppDatabaseContext>((sp, options) => {
  27. IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
  28. string? sqliteConnectionString = configuration.GetConnectionString("Default");
  29. if (string.IsNullOrWhiteSpace(sqliteConnectionString)) {
  30. throw new Exception("Configuration Database Connection String Error.");
  31. }
  32. options.UseSqlite(sqliteConnectionString);
  33. });
  34. })
  35. .AddDefaultMessageManager()
  36. .AddDefaultMessageCatcher()
  37. .AddDefaultScenarioManager()
  38. .ConfigureServices(services => {
  39. // MainWindow
  40. services.AddSingleton<MainViewModel>();
  41. services.AddSingleton<MainWindow>(sp => {
  42. return new MainWindow() {
  43. DataContext = sp.GetRequiredService<MainViewModel>()
  44. };
  45. });
  46. })
  47. .ConfigureServices(services => {
  48. // Application
  49. services.AddSingleton<Application>(sp => {
  50. Application application = new Application() {
  51. MainWindow = sp.GetRequiredService<MainWindow>(),
  52. };
  53. application.Startup += (s, e) => {
  54. if (s is Application application) {
  55. application.MainWindow.Show();
  56. }
  57. };
  58. return application;
  59. });
  60. });
  61. }
  62. static public void DbTest(IHost host) {
  63. IDbContextFactory<AppDatabaseContext> factory = host.Services.GetRequiredService<IDbContextFactory<AppDatabaseContext>>();
  64. AppDatabaseContext context = factory.CreateDbContext();
  65. {
  66. Scenario scenario = new Scenario() {
  67. Id = 1,
  68. Name = "Test"
  69. };
  70. if (context.Scenarios.Contains(scenario) == false) {
  71. context.Scenarios.Add(scenario);
  72. }
  73. else {
  74. scenario.IsLegacy = true;
  75. context.Scenarios.Update(scenario);
  76. }
  77. context.SaveChanges();
  78. }
  79. foreach (Scenario scenario in context.Scenarios) {
  80. Console.WriteLine($"{scenario.Name}-{scenario.Id}<{scenario.IsLegacy}>: {scenario.Description}.");
  81. }
  82. }
  83. }
  84. }