L5: WinForms vollstaendig entfernt - das Projekt ist plattformneutral
Die Avalonia-Shell hatte in L4 Funktionsgleichheit erreicht, damit ist die WinForms-Fassung ueberfluessig. Entfernt: IBKRTrader.App.csproj, Program.cs, LauncherForm.cs, UI/ (14 Dateien) und Properties/Resources.* - zusammen rund 1.900 Zeilen. Rueckfallpunkt bleibt der Tag winforms-final. Resources/ mit den 24 PNG-Symbolen bleibt: die Avalonia-Shell bindet sie ueber AvaloniaResource ein und nutzt dieselben Symbolschluessel. Kein Projekt traegt mehr eine Plattformbindung. Verifiziert: alle acht Projekte bauen einzeln fuer linux-x64, und die gesamte Projektmappe baut ohne Fehler und ohne Warnung. Die CI kann damit vereinfacht werden: der Behelf aus L4 - unter Linux die Projekte einzeln statt der Mappe zu bauen, weil IBKRTrader.App dort nicht baubar war - entfaellt. Beide Plattformen bauen und testen jetzt dieselbe Mappe. Doku nachgezogen: README (Architektur-Uebersicht, Start- und Pruefbefehle), ARCHITECTURE (Ziel-Architektur auf den Ist-Stand, neuer Abschnitt L0-L5 in der Phasen-Checkliste, AppTimeZone ergaenzt). Der Hinweis "UI-Contract liegt im Core" war nach L1a falsch - WindowMenu ist dort raus, der Contract ist jetzt toolkit-neutral. Verifiziert: Build 0 Fehler/0 Warnungen, 193 Tests gruen, Smoke-UI konstruiert alle 7 Ansichten + Launcher + Dialog, Daemon-Prueflauf OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,13 +4,20 @@ Modulares C#-Trading-Framework für Interactive-Brokers-Aktien. **Harter Core +
|
||||
Strategie-Module + Launcher**, der die Fenster der Module öffnet. Konzept nach dem Vorbild von
|
||||
PolytraderSharp (nur IBKR statt Polymarket).
|
||||
|
||||
**Läuft auf Windows und Linux** – wahlweise mit Oberfläche (Avalonia) oder kopflos als Dienst.
|
||||
|
||||
## Architektur (Kurzform)
|
||||
```
|
||||
IBKRTrader.App WinExe – Generic Host + Launcher/Shell (WinForms)
|
||||
src/IBKRTrader.App.Avalonia Oberfläche (Avalonia, plattformneutral)
|
||||
src/IBKRTrader.Daemon kopfloser Dienst (systemd) – dieselbe Anwendung ohne Fenster
|
||||
src/IBKRTrader.Hosting Host-Zusammenstellung, von beiden Einstiegspunkten geteilt
|
||||
src/IBKRTrader.Core Contracts, EF-Persistenz, Trading-Kern, Worker, Security
|
||||
src/IBKRTrader.Modules.* je Modul ein eigenes Projekt (referenziert nur Core)
|
||||
tests/IBKRTrader.Tests xUnit (Unit + EF-InMemory)
|
||||
```
|
||||
Alle Projekte sind `net10.0` ohne Plattformbindung. Der UI-Contract im Core ist toolkit-neutral
|
||||
(`Func<object> CreateView`, `IconKey` statt Bild), damit Core und Module auch kopflos laufen –
|
||||
die Fenster registriert die Shell zentral in `Shell/ModuleViews.cs`.
|
||||
- **Generic Host** (`Host.CreateDefaultBuilder`), Worker/Services als `IHostedService`.
|
||||
- **Module** über `IModule` (RegisterServices/RegisterUi/Start/Stop); UI über `IModuleUiHost`/`ModuleView`.
|
||||
- **Persistenz**: EF Core (Pomelo/MariaDB), Migrationen **extern** angewendet (nicht zur Laufzeit).
|
||||
@@ -25,10 +32,21 @@ tests/IBKRTrader.Tests xUnit (Unit + EF-InMemory)
|
||||
```bash
|
||||
dotnet build IBKRTrader.slnx
|
||||
dotnet test IBKRTrader.slnx
|
||||
dotnet run --project IBKRTrader.App.csproj -- --smoke-ui # Headless-UI-Check
|
||||
dotnet run --project IBKRTrader.App.csproj # App starten
|
||||
```
|
||||
|
||||
Anwendung starten:
|
||||
```bash
|
||||
dotnet run --project src/IBKRTrader.App.Avalonia
|
||||
```
|
||||
|
||||
Prüfläufe – beide ohne Anzeigegerät und ohne laufende Dienste, also CI-tauglich:
|
||||
```bash
|
||||
dotnet run --project src/IBKRTrader.App.Avalonia -- --smoke-ui
|
||||
dotnet run --project src/IBKRTrader.Daemon -- --check
|
||||
```
|
||||
|
||||
Kopflos auf Linux (systemd): siehe [deploy/README.md](deploy/README.md).
|
||||
|
||||
## Konfiguration
|
||||
- `appsettings.Local.json` (gitignored) hält den DB-Connection-String (`Database:MySqlConnectionString`).
|
||||
- `settings.json` (gitignored) – App-Settings (IBKR-Ports, Logging, Worker, Trading).
|
||||
|
||||
Reference in New Issue
Block a user