Using DependencyInjection and configuration file (json)
This commit is contained in:
@ -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>());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
5
YouTubeViewers.WPF/appsettings.json
Normal file
5
YouTubeViewers.WPF/appsettings.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"sqlite": "Data Source=YouTubeViewers.db"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user