diff --git a/FahzeugWPF/App.xaml b/FahzeugWPF/App.xaml
new file mode 100644
index 0000000..50b5785
--- /dev/null
+++ b/FahzeugWPF/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/FahzeugWPF/App.xaml.cs b/FahzeugWPF/App.xaml.cs
new file mode 100644
index 0000000..e6046f6
--- /dev/null
+++ b/FahzeugWPF/App.xaml.cs
@@ -0,0 +1,44 @@
+using FahrzeugDatenBank;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using System.IO;
+using System.Windows;
+
+namespace FahzeugWPF
+{
+
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ public static ServiceProvider ServiceProvider { get; private set; }
+
+ public App()
+ {
+ IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
+
+ ServiceCollection services = new ServiceCollection();
+
+ services.AddScoped(sp => new Konfigurationsleser(configuration));
+ services.AddScoped(sp => new FahrzeugRepository(sp.GetRequiredService().LiesDBVerebindung()));
+ services.AddScoped();
+ services.AddSingleton();
+ services.AddSingleton();
+
+ ServiceProvider = services.BuildServiceProvider();
+ }
+
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ this.MainWindow = ServiceProvider.GetService();
+ this.MainWindow.DataContext = ServiceProvider.GetService();
+ this.MainWindow.Show();
+ }
+
+ private string GetConnectionString()
+ {
+ return "Server=localhost;User ID=admin;Password=admin;Database=FahrzeugDB";
+ }
+ }
+}
diff --git a/FahzeugWPF/AssemblyInfo.cs b/FahzeugWPF/AssemblyInfo.cs
new file mode 100644
index 0000000..b0ec827
--- /dev/null
+++ b/FahzeugWPF/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/FahzeugWPF/FahrzeugeModell.cs b/FahzeugWPF/FahrzeugeModell.cs
new file mode 100644
index 0000000..a582d15
--- /dev/null
+++ b/FahzeugWPF/FahrzeugeModell.cs
@@ -0,0 +1,45 @@
+using FahrzeugDatenBank;
+
+namespace FahzeugWPF;
+
+class FahrzeugeModell
+{
+ private readonly FahrzeugRepository _repository;
+
+ public FahrzeugeModell(FahrzeugRepository repository)
+ {
+ this._repository = repository;
+ }
+
+ public async Task> LadeAlleFahrzeuge()
+ {
+ List? fahrzeugs = await Task.Run(() =>
+ {
+ return _repository.HoleAlleFahrzeuge();
+ });
+ var fahrzeugListe = KonvertiereFahrzeuge(fahrzeugs);
+ return fahrzeugListe;
+ }
+
+ private IEnumerable KonvertiereFahrzeuge(IEnumerable fahrzeugs)
+ {
+ return fahrzeugs.Select(fahrzeug => KonvertiereFahrzeuf(fahrzeug));
+ }
+
+ private Fahrzeug KonvertiereFahrzeuf(FahrzeugDTO fahrzeugDTO)
+ {
+ switch (fahrzeugDTO.Typ)
+ {
+ case "Auto":
+ var auto = new Auto() { Id = fahrzeugDTO.Id, Name = fahrzeugDTO.Name, };
+ return auto;
+ case "Motorrad":
+ var motorrad = new Motorrad() { Id = fahrzeugDTO.Id, Name = fahrzeugDTO.Name, };
+ return motorrad;
+ case "Fahrrad":
+ var fahrrad = new Fahrrad() { Id = fahrzeugDTO.Id, Name = fahrzeugDTO.Name, };
+ return fahrrad;
+ }
+ throw new Exception($"Unbekannter FahrzeugTyp: {fahrzeugDTO.Typ}");
+ }
+}
diff --git a/FahzeugWPF/FahzeugWPF.csproj b/FahzeugWPF/FahzeugWPF.csproj
new file mode 100644
index 0000000..aa2b36b
--- /dev/null
+++ b/FahzeugWPF/FahzeugWPF.csproj
@@ -0,0 +1,31 @@
+
+
+
+ WinExe
+ net9.0-windows
+ enable
+ enable
+ true
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FahzeugWPF/IKonfigurationsleser.cs b/FahzeugWPF/IKonfigurationsleser.cs
new file mode 100644
index 0000000..062e375
--- /dev/null
+++ b/FahzeugWPF/IKonfigurationsleser.cs
@@ -0,0 +1,7 @@
+namespace FahzeugWPF
+{
+ public interface IKonfigurationsleser
+ {
+ string LiesDBVerebindung();
+ }
+}
\ No newline at end of file
diff --git a/FahzeugWPF/Konfigurationsleser.cs b/FahzeugWPF/Konfigurationsleser.cs
new file mode 100644
index 0000000..df8020d
--- /dev/null
+++ b/FahzeugWPF/Konfigurationsleser.cs
@@ -0,0 +1,18 @@
+using Microsoft.Extensions.Configuration;
+
+namespace FahzeugWPF;
+
+public class Konfigurationsleser : IKonfigurationsleser
+{
+ private readonly IConfiguration _configuration;
+
+ public Konfigurationsleser(IConfiguration configuration)
+ {
+ this._configuration = configuration;
+ }
+
+ public string LiesDBVerebindung()
+ {
+ return _configuration.GetConnectionString("MariaDB");
+ }
+}
\ No newline at end of file
diff --git a/FahzeugWPF/MainWindow.xaml b/FahzeugWPF/MainWindow.xaml
new file mode 100644
index 0000000..cb06bca
--- /dev/null
+++ b/FahzeugWPF/MainWindow.xaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FahzeugWPF/MainWindow.xaml.cs b/FahzeugWPF/MainWindow.xaml.cs
new file mode 100644
index 0000000..532b9c8
--- /dev/null
+++ b/FahzeugWPF/MainWindow.xaml.cs
@@ -0,0 +1,24 @@
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace FahzeugWPF
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/FahzeugWPF/MainWindowViewModel.cs b/FahzeugWPF/MainWindowViewModel.cs
new file mode 100644
index 0000000..5fbcdca
--- /dev/null
+++ b/FahzeugWPF/MainWindowViewModel.cs
@@ -0,0 +1,26 @@
+using FahrzeugDatenBank;
+using System.Collections.ObjectModel;
+
+namespace FahzeugWPF;
+
+class MainWindowViewModel
+{
+ private readonly FahrzeugeModell _model;
+
+ public MainWindowViewModel(FahrzeugeModell modell)
+ {
+ this._model = modell;
+ this.InitialisiereDasViewModell();
+ }
+
+ public ObservableCollection Fahrzeuge { get; } = new ObservableCollection();
+
+ private async void InitialisiereDasViewModell()
+ {
+ var fahrzeuge = await _model.LadeAlleFahrzeuge();
+ foreach (var fahrzeug in fahrzeuge)
+ {
+ this.Fahrzeuge.Add(fahrzeug);
+ }
+ }
+}
diff --git a/FahzeugWPF/appsettings.json b/FahzeugWPF/appsettings.json
new file mode 100644
index 0000000..ac17e90
--- /dev/null
+++ b/FahzeugWPF/appsettings.json
@@ -0,0 +1,5 @@
+{
+ "ConnectionStrings": {
+ "MariaDB": "Server=localhost;User ID=admin;Password=admin;Database=FahrzeugDB"
+ }
+}
\ No newline at end of file
diff --git a/Multi/Program.cs b/Multi/Program.cs
index 796fb24..875606f 100644
--- a/Multi/Program.cs
+++ b/Multi/Program.cs
@@ -58,6 +58,11 @@ async Task Methode2()
return await Task.Run(() => Arbeiten1("Methode2"));
}
-Methode();
-Methode1();
-Methode2();
+Task task = Methode();
+var task1 = Methode1();
+var task2 = Methode2();
+
+await task;
+await task1;
+await task2;
+
diff --git a/Ubung.sln b/Ubung.sln
index d181135..1f68895 100644
--- a/Ubung.sln
+++ b/Ubung.sln
@@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Multi", "Multi\Multi.csproj
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FahrzeugDatenBankTest", "FahrzeugDatenBankTest\FahrzeugDatenBankTest.csproj", "{9C442F96-64F6-4CEA-AB7F-2B28BF578471}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FahzeugWPF", "FahzeugWPF\FahzeugWPF.csproj", "{BB365A73-CB9B-471A-BDBE-02843D8C72A3}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -45,6 +47,10 @@ Global
{9C442F96-64F6-4CEA-AB7F-2B28BF578471}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C442F96-64F6-4CEA-AB7F-2B28BF578471}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C442F96-64F6-4CEA-AB7F-2B28BF578471}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BB365A73-CB9B-471A-BDBE-02843D8C72A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BB365A73-CB9B-471A-BDBE-02843D8C72A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BB365A73-CB9B-471A-BDBE-02843D8C72A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BB365A73-CB9B-471A-BDBE-02843D8C72A3}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE