184 lines
8.2 KiB
C#
184 lines
8.2 KiB
C#
using DaSaSo.Domain.Model;
|
|
using DaSaSo.Domain.Services;
|
|
using DaSaSo.Domain.Services.BuildingsiteServices;
|
|
using DaSaSo.Domain.Services.ProjectServices;
|
|
using DaSaSo.Domain.Services.SewerObjectService;
|
|
using DaSaSo.EntityFramework;
|
|
using DaSaSo.EntityFramework.Services;
|
|
using DaSaSo.ViewModel;
|
|
using DaSaSo.ViewModel.Factories;
|
|
using DaSaSo.ViewModel.Interface;
|
|
using DaSaSo.ViewModel.State.ActualState;
|
|
using DaSaSo.ViewModel.State.Navigation;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using System;
|
|
using System.Windows;
|
|
|
|
namespace DaSaSo.Wpf
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for App.xaml
|
|
/// </summary>
|
|
public partial class App : Application
|
|
{
|
|
private readonly IHost _host;
|
|
public App()
|
|
{
|
|
_host = CreateHostBuilder().Build();
|
|
}
|
|
|
|
public static IHostBuilder CreateHostBuilder(string[]? args = null)
|
|
{
|
|
return Host.CreateDefaultBuilder(args)
|
|
.ConfigureAppConfiguration(c=>
|
|
{
|
|
c.AddJsonFile("appsettings.json");
|
|
c.AddEnvironmentVariables();
|
|
})
|
|
.ConfigureServices((context, services) =>
|
|
{
|
|
|
|
string connectionString = context.Configuration.GetConnectionString("default");
|
|
|
|
services.AddSingleton<DaSaSoDbContextFactory>(new DaSaSoDbContextFactory(connectionString));
|
|
|
|
services.AddSingleton<IDataService<Client>, ClientDataService>();
|
|
services.AddSingleton<IDataService<Project>, ProjectDataService>();
|
|
services.AddSingleton<IDataService<Buildingsite>, BuildingsiteDataService>();
|
|
services.AddSingleton<IDataService<SewerObject>, SewerObjectDataService>();
|
|
services.AddSingleton<ClientListViewModel>();
|
|
services.AddSingleton<IProjectService, ProjectService>();
|
|
services.AddSingleton<IBuildingsiteService, BuildingsiteService>();
|
|
services.AddSingleton<ISewerObjectService, SewerObjectService>();
|
|
|
|
|
|
services.AddSingleton<IViewModelAbstractFactory, MainWindowViewModelFactory>();
|
|
services.AddSingleton<IViewModelSewerMainFactory, SewerWindowViewModelFactory>();
|
|
services.AddSingleton<CreateViewModel<ClientEditViewModel>>(services =>
|
|
{
|
|
return () => new ClientEditViewModel(
|
|
services.GetRequiredService<IDataService<Client>>(),
|
|
services.GetRequiredService<IActualProject>(),
|
|
new ViewModelDelegateRenavigator(
|
|
services.GetRequiredService<IMainWindowNavigator>()
|
|
));
|
|
});
|
|
services.AddSingleton<CreateViewModel<HomeViewModel>>(services =>
|
|
{
|
|
return () => new HomeViewModel();
|
|
});
|
|
services.AddSingleton<CreateViewModel<SewerStammdatenViewModel>>(services =>
|
|
{
|
|
return () => new SewerStammdatenViewModel(
|
|
services.GetRequiredService<IActualProject>()
|
|
);
|
|
});
|
|
services.AddSingleton<CreateViewModel<SewerDamageListViewModel>>(services =>
|
|
{
|
|
return () => new SewerDamageListViewModel();
|
|
});
|
|
|
|
services.AddSingleton<CreateViewModel<ClientListViewModel>>(services =>
|
|
{
|
|
return () => new ClientListViewModel(
|
|
services.GetRequiredService<IDataService<Client>>(),
|
|
services.GetRequiredService<IActualProject>(),
|
|
new ViewModelDelegateRenavigator(
|
|
services.GetRequiredService<IMainWindowNavigator>()
|
|
));
|
|
});
|
|
services.AddSingleton<CreateViewModel<SewerMainListViewModel>>(services =>
|
|
{
|
|
return () => new SewerMainListViewModel(
|
|
services.GetRequiredService<ISewerMainNavigator>(),
|
|
services.GetRequiredService<IActualProject>(),
|
|
services.GetRequiredService<IViewModelSewerMainFactory>()
|
|
);
|
|
});
|
|
services.AddSingleton<CreateViewModel<ProjectListViewModel>>(services =>
|
|
{
|
|
return () => new ProjectListViewModel(
|
|
services.GetRequiredService<IDataService<Project>>(),
|
|
services.GetRequiredService<IActualProject>(),
|
|
new ViewModelDelegateRenavigator(
|
|
services.GetRequiredService<IMainWindowNavigator>()),
|
|
services.GetRequiredService<IProjectService>()
|
|
|
|
);
|
|
});
|
|
|
|
services.AddSingleton<CreateViewModel<BuildingsiteListViewModel>>(services =>
|
|
{
|
|
return () => new BuildingsiteListViewModel(
|
|
services.GetRequiredService<IDataService<Buildingsite>>(),
|
|
services.GetRequiredService<IActualProject>(),
|
|
new ViewModelDelegateRenavigator(
|
|
services.GetRequiredService<IMainWindowNavigator>()),
|
|
services.GetRequiredService<IBuildingsiteService>()
|
|
);
|
|
});
|
|
|
|
services.AddSingleton<CreateViewModel<SewerObjectListViewModel>>(services =>
|
|
{
|
|
return () => new SewerObjectListViewModel(
|
|
services.GetRequiredService<IDataService<SewerObject>>(),
|
|
services.GetRequiredService<IActualProject>(),
|
|
services.GetRequiredService<ISewerObjectService>()
|
|
);
|
|
});
|
|
|
|
//services.AddSingleton<INavigator, Navigator>();
|
|
services.AddScoped<IActualProject, ActualProject>();
|
|
services.AddScoped<IMainWindowNavigator, MainWindowNavigator>();
|
|
services.AddScoped<ISewerMainNavigator, SewerMainNavigator>();
|
|
|
|
services.AddScoped<MainWindowViewModel>();
|
|
});
|
|
}
|
|
protected override void OnStartup(StartupEventArgs e)
|
|
{
|
|
Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
|
|
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
|
|
|
|
|
_host.Start();
|
|
|
|
MainWindow? window = new MainWindow() { DataContext = _host.Services.GetRequiredService<MainWindowViewModel>() };
|
|
window.Show();
|
|
|
|
|
|
|
|
base.OnStartup(e);
|
|
}
|
|
|
|
protected override async void OnExit(ExitEventArgs e)
|
|
{
|
|
_host.StopAsync();
|
|
_host.Dispose();
|
|
base.OnExit(e);
|
|
}
|
|
|
|
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
Exception ex = (Exception)e.ExceptionObject;
|
|
string text = "An application error occured. Plrease contact the Administrator with the following information:\n\n";
|
|
MessageBox.Show(text + " " + ex.Message + "\n\n" + ex.StackTrace);
|
|
}
|
|
catch(Exception ex2)
|
|
{
|
|
MessageBox.Show("Fatal Non-UI error", ex2.Message, MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
}
|
|
|
|
private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
}
|
|
}
|