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