App.xaml.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 partial class App: Application {
  12. [STAThread]
  13. static public void Main(string[] args) {
  14. SQLitePCL.Batteries.Init();
  15. using IHost host = CreateHostBuilder(args).Build();
  16. host.Start();
  17. App app = new App();
  18. app.InitializeComponent();
  19. app.MainWindow = host.Services.GetRequiredService<MainWindow>();
  20. app.MainWindow.Visibility = Visibility.Visible;
  21. app.Run();
  22. #if DEBUG
  23. // DbTest(host);
  24. #endif
  25. }
  26. protected override void OnStartup(StartupEventArgs e) {
  27. base.OnStartup(e);
  28. // SplashScreen splash = new SplashScreen(@"\Assets\Image\琪露诺3.jpg");
  29. // splash.Show(false, true);
  30. // splash.Close(new TimeSpan(0, 0, 5));
  31. }
  32. static private IHostBuilder CreateHostBuilder(string[] args) {
  33. return Host.CreateDefaultBuilder(args)
  34. .ConfigureServices(services => {
  35. services.AddDbContextFactory<AppDatabaseContext>((sp, options) => {
  36. IConfiguration configuration = sp.GetRequiredService<IConfiguration>();
  37. string? sqliteConnectionString = configuration.GetConnectionString("Default");
  38. if (string.IsNullOrWhiteSpace(sqliteConnectionString)) {
  39. throw new Exception("Configuration Database Connection String Error.");
  40. }
  41. options.UseSqlite(sqliteConnectionString);
  42. });
  43. })
  44. .AddDefaultMessageManager()
  45. .AddDefaultMessageCatcher()
  46. .AddDefaultScenarioManager()
  47. .ConfigureServices(services => {
  48. // MainWindow
  49. services.AddSingleton<MainViewModel>();
  50. services.AddSingleton<MainWindow>(sp => {
  51. return new MainWindow() {
  52. DataContext = sp.GetRequiredService<MainViewModel>()
  53. };
  54. });
  55. });
  56. }
  57. static public void DbTest(IHost host) {
  58. IDbContextFactory<AppDatabaseContext> factory = host.Services.GetRequiredService<IDbContextFactory<AppDatabaseContext>>();
  59. AppDatabaseContext context = factory.CreateDbContext();
  60. {
  61. Scenario scenario = new Scenario() {
  62. Id = 1,
  63. Name = "Test"
  64. };
  65. if (context.Scenarios.Contains(scenario) == false) {
  66. context.Scenarios.Add(scenario);
  67. }
  68. else {
  69. scenario.IsLegacy = true;
  70. context.Scenarios.Update(scenario);
  71. }
  72. context.SaveChanges();
  73. }
  74. foreach (Scenario scenario in context.Scenarios) {
  75. Console.WriteLine($"{scenario.Name}-{scenario.Id}<{scenario.IsLegacy}>: {scenario.Description}.");
  76. }
  77. }
  78. }
  79. }