Using DependencyInjection and configuration file (json)

This commit is contained in:
2022-08-24 08:49:14 +02:00
parent 2b42691434
commit 595e9e2365
3 changed files with 68 additions and 37 deletions

View File

@ -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<DbContextOptions>(
new DbContextOptionsBuilder()
.UseSqlite(connectionString)
.Options);
services.AddSingleton<YouTubeViewersDbContextFactory>();
services.AddSingleton<IGetAllYouTubeViewersQuery,GetAllYouTubeViewersQuery>();
services.AddSingleton<ICreateYouTubeViewerCommand,CreateYouTubeViewerCommand>();
services.AddSingleton<IUpdateYouTubeViewerCommand,UpdateYouTubeViewerCommand>();
services.AddSingleton<IDeleteYouTubeViewerCommand,DeleteYouTubeViewerCommand>();
services.AddSingleton<ModalNavigationStore>();
services.AddSingleton<YouTubeViewersStore>();
services.AddSingleton<SelectedYouTubeViewerStore>();
services.AddTransient<YouTubeViewersViewModel>(CreateYouTubeViewersViewModel);
services.AddSingleton<MainViewModel>();
services.AddSingleton<MainWindow>((services) => new MainWindow()
{
DataContext = services.GetRequiredService<MainViewModel>()
});
})
.Build();
}
protected override void OnStartup(StartupEventArgs e)
{
using(YouTubeViewersDbContext context = _youTubeViewersDbContextFactory.Create())
_host.Start();
var youTubeViewersDbContextFactory = _host.Services.GetRequiredService<YouTubeViewersDbContextFactory>();
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>();
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<YouTubeViewersStore>(),
services.GetRequiredService<SelectedYouTubeViewerStore>(),
services.GetRequiredService<ModalNavigationStore>());
}
}

View File

@ -10,6 +10,7 @@
<ItemGroup>
<PackageReference Include="DropdownMenu.WPF" Version="1.0.0" />
<PackageReference Include="LoadingSpinner.WPF" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
<PackageReference Include="SimpleModal.WPF" Version="1.0.0" />
</ItemGroup>
@ -18,4 +19,10 @@
<ProjectReference Include="..\YouTubeViewers.EntityFramework\YouTubeViewers.EntityFramework.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,5 @@
{
"ConnectionStrings": {
"sqlite": "Data Source=YouTubeViewers.db"
}
}