diff --git a/docs/ReC.Client.xwiki b/docs/ReC.Client.xwiki index dc28b75..059cd78 100644 --- a/docs/ReC.Client.xwiki +++ b/docs/ReC.Client.xwiki @@ -431,40 +431,3 @@ Migrations-Tipps: * **`BuildStaticClient` / `Create`** ? ersetzen durch `services.AddRecClient(...)` und Konstruktor-Injektion. * **`TaskSyncExtensions.Sync`** ? den umliegenden Codepfad asynchron machen (`async Task`) und `await` verwenden. - -== 7. Migrations-Hinweise (jüngste Änderungen) == - -Folgende Änderungen sind zu beachten, falls Sie von einer früheren Version migrieren: - -* **GET-Methoden geben jetzt deserialisierte Werte zurück, nicht mehr `HttpResponseMessage`.** -** `GetAsync(...)` liest den Body **einmal** und gibt `T?` zurück. -** `GetAsync(...)` (ohne Typparameter) gibt `dynamic`/`JsonElement` zurück. -** Falls Sie zuvor `HttpResponseMessage` selbst behandelt haben (Status, Body lesen, deserialisieren), entfällt dieser Schritt. -* **Einheitliche Fehlerbehandlung über `ReCApiException`.** -** Bei HTTP-Fehlern wird konsistent diese Exception geworfen – auch für GET. -** Sie müssen nicht mehr selbst auf `IsSuccessStatusCode` prüfen. -* **`GetDynamicAsync` wurde umbenannt zu `GetAsync` (Overload).** -** Es gibt nun pro API-Klasse zwei `GetAsync`-Overloads: typisiert und dynamisch. Aufrufe von `GetDynamicAsync(...)` müssen zu `GetAsync(...)` geändert werden. -* **`TaskSyncExtensions` und statische `ReCClient`-Helfer sind `[Obsolete]`.** - -== 8. FAQ == - -**Warum gibt `GetAsync` einen deserialisierten Wert statt `HttpResponseMessage` zurück?** - -Damit wird der Response-Body genau einmal gelesen, Fehler werden einheitlich über `ReCApiException` behandelt, und Aufrufer müssen weder selbst auf den Statuscode prüfen noch die Antwort manuell deserialisieren. - -**Wozu der nicht-generische `GetAsync(...)`-Overload?** - -Er ist ein Komfort-Aufruf für Fälle, in denen Sie das Schema nicht (oder noch nicht) typisieren möchten. Intern ruft er `GetAsync` auf und liefert ein `JsonElement` zurück, das Sie ad hoc inspizieren können. - -**Gibt es einen Konflikt zwischen dem generischen und dem nicht-generischen `GetAsync`?** - -Nein. Beide Methoden haben unterschiedliche Signaturen (ein Methodengeneric-Parameter ist Teil der Signatur). Der Compiler wählt anhand der Aufrufsyntax (`GetAsync(...)` vs. `GetAsync(...)`). - -**Soll ich die statischen `ReCClient.Create`-Helfer noch verwenden?** - -Nur in Legacy-Szenarien. Für neuen Code: DI mit `services.AddRecClient(...)`. - -**Sind synchrone Aufrufe via `Sync()` sicher?** - -Nicht generell. In Umgebungen mit `SynchronizationContext` riskieren sie Deadlocks. Verwenden Sie `async/await`. diff --git a/src/ReC.Client/ReCClient.cs b/src/ReC.Client/ReCClient.cs index 5ed7410..f57d364 100644 --- a/src/ReC.Client/ReCClient.cs +++ b/src/ReC.Client/ReCClient.cs @@ -93,14 +93,19 @@ namespace ReC.Client /// This method should only be called once during application startup. /// /// The base URI of the ReC API. + /// An optional callback to configure . /// Thrown if the static provider has already been built. [Obsolete("Use a local service collection instead of the static provider.")] - public static void BuildStaticClient(string apiUri) +#if NETFRAMEWORK + public static void BuildStaticClient(string apiUri, Action configureOptions = null) +#else + public static void BuildStaticClient(string apiUri, Action? configureOptions = null) +#endif { if(Provider != null) throw new InvalidOperationException("Static Provider is already built."); - Services.AddRecClient(apiUri); + Services.AddRecClient(apiUri, configureOptions); Provider = Services.BuildServiceProvider(); } @@ -111,14 +116,19 @@ namespace ReC.Client /// This method should only be called once during application startup. /// /// An action to configure the . + /// An optional callback to configure . /// Thrown if the static provider has already been built. [Obsolete("Use a local service collection instead of the static provider.")] - public static void BuildStaticClient(Action configureClient) +#if NETFRAMEWORK + public static void BuildStaticClient(Action configureClient, Action configureOptions = null) +#else + public static void BuildStaticClient(Action configureClient, Action? configureOptions = null) +#endif { if (Provider != null) throw new InvalidOperationException("Static Provider is already built."); - Services.AddRecClient(configureClient); + Services.AddRecClient(configureClient, configureOptions); Provider = Services.BuildServiceProvider(); }