.NET 7 Preview 7: Mehr Eingriffspunkte in den OR-Mapper, aber unvollständig

Seite 2: Verbesserte Datenbindung für alle Blazor-Varianten

Inhaltsverzeichnis

Bei der Datenbindung in allen Blazor-Varianten (also Blazor WebAssembly, Blazor Server, Blazor Desktop und Blazor MAUI) gibt es nun die neuen Zusätze :get und :set, um das Auslesen von Werten und das Schreiben neuer Werte auf einfache Weise zu trennen:

<input @bind:get="currentCount" @bind:set="SetValue" />
 
@code {
 private int currentCount = 0;
 public void SetValue(int v)
 {
  if (v > 0) currentCount = v;
  else currentCount = 0;
 }
}

Zudem kann man mit :after eine Methode angeben, die automatisch nach Aktualisierung der Werte ausgeführt werden soll:

<input @bind="currentCount" @bind:after="Log" />

Die Mischung beider Erweiterungen ist aber nicht erlaubt. Folgende Zeile liefert den Laufzeitfehler "Error RZ10019 Attribute bind:after can not be used with bind:set. Invoke the code in bind:after inside bind:set instead":

<input @bind:get="currentCount" @bind:set="ValueChanged"
 @bind:after="Log" />

Bei der eingebauten Blazor-Komponente <Virtualize>, die .NET 5.0 einführte, ist es möglich, mit der neuen Eigenschaft SpacerElement das HTML-Tag, das die Komponente vor dem ersten und nach dem letzten Datensatz einfügt, selbst zu bestimmen:

<table>
<tbody>
  <Virtualize Items="@data" Context="d" SpacerElement="tr">
   <tr><td>@d</td></tr>
  </Virtualize>
</tbody>
</table>

Das Abstandselement war zuvor immer ein <div>-Tag, was aber in Verbindung mit einigen Tags wie <table> kein gültiges HTML ergab.

Der in Blazor seit der ersten Version enthaltene NavigationManager kann nun der Folgeseite eine Zeichenkette über den Browser History Stack übergeben:

navigationManager.NavigateTo("/Counter", 
                             new NavigationOptions {
                               HistoryEntryState = 
                                 "Startwert:10;Increment:2"});

Die Folgeseite kann diese Zeichenkette auswerten:

protected override void OnInitialized()
 {
  if (navigationManager.HistoryEntryState != null && 
      navigationManager.HistoryEntryState.Length > 0)
  {
   string data = navigationManager.HistoryEntryState;
   message = "Uebergebene Daten: " + 
     navigationManager.HistoryEntryState;
   currentCount = 
     Convert.ToInt32(data.Split(";")[0].Replace("Startwert:", ""));
   Increment = 
     Convert.ToInt32(data.Split(";")[1].Replace("Increment:", ""));
  }
  else
  {
   message = "Uebergebene Daten: KEINE";
  }
 }

Preview 7 erweitert die in Blazor WebAssembly 7.0 Preview 6 eingeführte Unterstützung der Hashing-Algorithmen (SHA1, SHA256, SHA364, SHA512 – jeweils inklusive HMAC-Variante) direkt über die Schnittstelle SubtleCrypto des Web Crypto API in modernen Browsern. Nun sind ohne Rückgriff auf .NET-APIs auch AES-CBC, Rfc2898DeriveBytes (PBKDF2) und HKDF möglich.

Das in früheren Preview-Version von .NET 7.0 eingeführte Transcoding zwischen gRPC und JSON hat Microsoft beschleunigt. Die in .NET 7.0 Preview 1 eingeführten Schnittstellen IFormFile und IFormFileCollection zum Dateiupload unterstützen nun auch eine Authentifizierung. Mit der Schnittstelle IProblemDetailsService lassen sich Problemdetails gemäß RFC 7807 in HTTP-Antworten zurückmelden. Die in Preview 7 eingeführten HttpResults-Schnittstellen haben wie folgt Zuwachs erhalten:

  • Microsoft.AspNetCore.Http.IContentTypeHttpResult
  • Microsoft.AspNetCore.Http.IFileHttpResult
  • Microsoft.AspNetCore.Http.INestedHttpResult
  • Microsoft.AspNetCore.Http.IStatusCodeHttpResult
  • Microsoft.AspNetCore.Http.IValueHttpResult
  • Microsoft.AspNetCore.Http.IValueHttpResult<TValue>

Microsoft hat im Blogeintrag zur Preview angekündigt, dass Preview 7 die letzte als "Preview" bezeichnete Vorabversion war. Falls der Hersteller dem Entwicklungsschema von .NET 6.0 folgt, sollten noch zwei Versionen im Status Release Candidate (RC) im September und Oktober bis zum geplanten Erscheinungstermin am 8. November 2022 folgen.

Auch in den RC-Versionen sind noch zahlreiche neue Features zu erwarten, denn insbesondere die Entwicklungsteams von ASP.NET Core und das Team hinter Entity Framework Core haben noch zahlreiche geplante Neuerungen im Backlog.

Einige zu Beginn des Jahres angekündigte Funktionen wie das Hosting mehrerer Blazor-Anwendungen in einem Dokument, eine bessere Kontrolle über die Blazor Server-Circuits und echtes Multi-Threading für Blazor WebAssembly wurden aber inzwischen vertagt. Das Multi-Threading soll aber immerhin als unfertige Vorab-Implementierung in der einsatzreifen Fassung .NET 7.0 enthalten sein. Microsoft hatte schon in der Vergangenheit solche Previews mitunter als Teil von Releaseversionen ins Rennen geschickt.

Die fertige Version von .NET 7.0 ist für den 8. November 2022 angekündigt. Der Support für diese Version soll bis zum Mai 2024 laufen.

(sih)