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.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration; using System.Configuration;
@ -18,59 +21,75 @@ namespace YouTubeViewers.WPF;
public partial class App : Application public partial class App : Application
{ {
private readonly ModalNavigationStore _modalNavigationStore;
private readonly YouTubeViewersDbContextFactory _youTubeViewersDbContextFactory; private readonly IHost _host;
private readonly IGetAllYouTubeViewersQuery _getAllYouTubeViewersQuery;
private readonly ICreateYouTubeViewerCommand _createYouTubeViewerCommand;
private readonly IUpdateYouTubeViewerCommand _updateYouTubeViewerCommand;
private readonly IDeleteYouTubeViewerCommand _deleteYouTubeViewerCommand;
private readonly YouTubeViewersStore _youTubeViewersStore;
private readonly SelectedYouTubeViewerStore _selectedYouTubeViewerStore;
public App() public App()
{ {
string connectionString = "Data Source=YouTubeViewers.db"; _host = Host.CreateDefaultBuilder()
_modalNavigationStore = new ModalNavigationStore(); .ConfigureServices((context, services) =>
_youTubeViewersDbContextFactory = new YouTubeViewersDbContextFactory( {
new DbContextOptionsBuilder() string connectionString = context.Configuration.GetConnectionString("sqlite");
.UseSqlite(connectionString) services.AddSingleton<DbContextOptions>(
.Options new DbContextOptionsBuilder()
); .UseSqlite(connectionString)
_getAllYouTubeViewersQuery = new GetAllYouTubeViewersQuery(_youTubeViewersDbContextFactory); .Options);
_createYouTubeViewerCommand = new CreateYouTubeViewerCommand(_youTubeViewersDbContextFactory); services.AddSingleton<YouTubeViewersDbContextFactory>();
_updateYouTubeViewerCommand = new UpdateYouTubeViewerCommand(_youTubeViewersDbContextFactory);
_deleteYouTubeViewerCommand = new DeleteYouTubeViewerCommand(_youTubeViewersDbContextFactory); services.AddSingleton<IGetAllYouTubeViewersQuery,GetAllYouTubeViewersQuery>();
_youTubeViewersStore = new YouTubeViewersStore( services.AddSingleton<ICreateYouTubeViewerCommand,CreateYouTubeViewerCommand>();
_getAllYouTubeViewersQuery, services.AddSingleton<IUpdateYouTubeViewerCommand,UpdateYouTubeViewerCommand>();
_createYouTubeViewerCommand, services.AddSingleton<IDeleteYouTubeViewerCommand,DeleteYouTubeViewerCommand>();
_updateYouTubeViewerCommand,
_deleteYouTubeViewerCommand services.AddSingleton<ModalNavigationStore>();
); services.AddSingleton<YouTubeViewersStore>();
_selectedYouTubeViewerStore = new SelectedYouTubeViewerStore(_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) 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.EnsureCreated();
context.Database.Migrate(); context.Database.Migrate();
} }
YouTubeViewersViewModel youTubeViewersViewModel = YouTubeViewersViewModel.LoadViewModel( MainWindow = _host.Services.GetRequiredService<MainWindow>();
_youTubeViewersStore,
_selectedYouTubeViewerStore,
_modalNavigationStore);
MainWindow = new MainWindow()
{
DataContext = new MainViewModel(_modalNavigationStore, youTubeViewersViewModel)
};
MainWindow.Show(); MainWindow.Show();
base.OnStartup(e); 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> <ItemGroup>
<PackageReference Include="DropdownMenu.WPF" Version="1.0.0" /> <PackageReference Include="DropdownMenu.WPF" Version="1.0.0" />
<PackageReference Include="LoadingSpinner.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" /> <PackageReference Include="SimpleModal.WPF" Version="1.0.0" />
</ItemGroup> </ItemGroup>
@ -18,4 +19,10 @@
<ProjectReference Include="..\YouTubeViewers.EntityFramework\YouTubeViewers.EntityFramework.csproj" /> <ProjectReference Include="..\YouTubeViewers.EntityFramework\YouTubeViewers.EntityFramework.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

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