diff --git a/YouTubeViewers.WPF/App.xaml.cs b/YouTubeViewers.WPF/App.xaml.cs index 25322da..e9243af 100644 --- a/YouTubeViewers.WPF/App.xaml.cs +++ b/YouTubeViewers.WPF/App.xaml.cs @@ -1,4 +1,7 @@ using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Configuration; @@ -18,59 +21,75 @@ namespace YouTubeViewers.WPF; public partial class App : Application { - private readonly ModalNavigationStore _modalNavigationStore; - private readonly YouTubeViewersDbContextFactory _youTubeViewersDbContextFactory; - private readonly IGetAllYouTubeViewersQuery _getAllYouTubeViewersQuery; - private readonly ICreateYouTubeViewerCommand _createYouTubeViewerCommand; - private readonly IUpdateYouTubeViewerCommand _updateYouTubeViewerCommand; - private readonly IDeleteYouTubeViewerCommand _deleteYouTubeViewerCommand; - private readonly YouTubeViewersStore _youTubeViewersStore; - private readonly SelectedYouTubeViewerStore _selectedYouTubeViewerStore; + + private readonly IHost _host; public App() { - string connectionString = "Data Source=YouTubeViewers.db"; - _modalNavigationStore = new ModalNavigationStore(); - _youTubeViewersDbContextFactory = new YouTubeViewersDbContextFactory( - new DbContextOptionsBuilder() - .UseSqlite(connectionString) - .Options - ); - _getAllYouTubeViewersQuery = new GetAllYouTubeViewersQuery(_youTubeViewersDbContextFactory); - _createYouTubeViewerCommand = new CreateYouTubeViewerCommand(_youTubeViewersDbContextFactory); - _updateYouTubeViewerCommand = new UpdateYouTubeViewerCommand(_youTubeViewersDbContextFactory); - _deleteYouTubeViewerCommand = new DeleteYouTubeViewerCommand(_youTubeViewersDbContextFactory); - _youTubeViewersStore = new YouTubeViewersStore( - _getAllYouTubeViewersQuery, - _createYouTubeViewerCommand, - _updateYouTubeViewerCommand, - _deleteYouTubeViewerCommand - ); - _selectedYouTubeViewerStore = new SelectedYouTubeViewerStore(_youTubeViewersStore); + _host = Host.CreateDefaultBuilder() + .ConfigureServices((context, services) => + { + string connectionString = context.Configuration.GetConnectionString("sqlite"); + services.AddSingleton( + new DbContextOptionsBuilder() + .UseSqlite(connectionString) + .Options); + services.AddSingleton(); + + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddTransient(CreateYouTubeViewersViewModel); + services.AddSingleton(); + + services.AddSingleton((services) => new MainWindow() + { + DataContext = services.GetRequiredService() + }); + }) + .Build(); + } + protected override void OnStartup(StartupEventArgs e) { - using(YouTubeViewersDbContext context = _youTubeViewersDbContextFactory.Create()) + _host.Start(); + + var youTubeViewersDbContextFactory = _host.Services.GetRequiredService(); + using (YouTubeViewersDbContext context = youTubeViewersDbContextFactory.Create()) { //context.Database.EnsureCreated(); context.Database.Migrate(); } - YouTubeViewersViewModel youTubeViewersViewModel = YouTubeViewersViewModel.LoadViewModel( - _youTubeViewersStore, - _selectedYouTubeViewerStore, - _modalNavigationStore); - - MainWindow = new MainWindow() - { - DataContext = new MainViewModel(_modalNavigationStore, youTubeViewersViewModel) - }; - + MainWindow = _host.Services.GetRequiredService(); MainWindow.Show(); base.OnStartup(e); } + + protected override void OnExit(ExitEventArgs e) + { + _host.StopAsync(); + _host.Dispose(); + base.OnExit(e); + } + + private YouTubeViewersViewModel CreateYouTubeViewersViewModel(IServiceProvider services) + { + return YouTubeViewersViewModel.LoadViewModel( + services.GetRequiredService(), + services.GetRequiredService(), + services.GetRequiredService()); + } + } diff --git a/YouTubeViewers.WPF/YouTubeViewers.WPF.csproj b/YouTubeViewers.WPF/YouTubeViewers.WPF.csproj index 16713ea..0cc8c3f 100644 --- a/YouTubeViewers.WPF/YouTubeViewers.WPF.csproj +++ b/YouTubeViewers.WPF/YouTubeViewers.WPF.csproj @@ -10,6 +10,7 @@ + @@ -18,4 +19,10 @@ + + + PreserveNewest + + + diff --git a/YouTubeViewers.WPF/appsettings.json b/YouTubeViewers.WPF/appsettings.json new file mode 100644 index 0000000..e7b37dc --- /dev/null +++ b/YouTubeViewers.WPF/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "sqlite": "Data Source=YouTubeViewers.db" + } +} \ No newline at end of file