Hybrid Hallo Welt – wie funktioniert es?
Wichtig
Dieses Projekt ist ein experimentelles Release. Wir hoffen, dass Sie Experimentelle Mobile Blazor Bindings ausprobieren und Feedback unter https://github.com/xamarin/MobileBlazorBindingsgeben.
Hinweis
Diese Seite ist eine Fortsetzung der exemplarischen Vorgehensweise Erstellen Ihrer ersten Hybrid-App . Es wird empfohlen, diese exemplarische Vorgehensweise auszuführen, bevor Sie fortfahren.
Tipp
Beginnen Sie für ein einfacheres Beispiel mit der exemplarischen Vorgehensweise Erstellen Ihrer ersten App und der nachfolgenden Hallo Welt Exemplarische Vorgehensweise, die einige grundlegende Funktionen von Blazor zeigt.
Sehen wir uns das erste Projekt an, das in der vorherigen exemplarischen Vorgehensweise erstellt wurde, um mehr über die Verwendung von Experimentellen Mobilen Blazor-Bindungen für Hybrid-Apps zu erfahren.
Das Standard zu betrachtenden Projekt ist das freigegebene Projekt, das die .razor
Dateien enthält. Die plattformspezifischen Projekte enthalten nur minimalen Code, der für experimentelle Mobile Blazor-Bindungen spezifisch ist.
Dies sind die bemerkenswerten Dateien und Ordner im freigegebenen Projekt:
Stammordner
_Imports.razor
- Enthält allgemeine Anweisungen, die auf alle anderen.razor
Dateien in diesem Ordner und seinen Unterordnern angewendet werden. Unterordner können über eigene_Imports.razor
Dateien mit zusätzlichen Anweisungen verfügen. Der häufigste Direktiventyp in dieser Datei ist die@using
-Anweisung, die zum Importieren eines Namespaces in.razor
Dateien verwendet wird, genau wie eine C#-using
Anweisung.App.cs
– Enthält den Standard Benutzeroberflächeneinstiegspunkt der Anwendung, der durch eine Klasse dargestellt wird, die von derXamarin.Forms.Application
Basisklasse abgeleitet ist. Der Konstruktor dieser Klasse instanziiert einen Host, fügt dem Host Dienste hinzu und verwendet dann den Host, um der Standard Anwendungsseite eine Blazor-Komponente mit dem NamenMain
hinzuzufügen.CounterState.cs
– Enthält einen Dienst, der einen Zählerwert nachverfolgt und zugehörige APIs anbietet. Dieser Dienst wird sowohl im nativen als auch im HTML-Teil der App verwendet.Main.razor
– Enthält die Standard Blazor UI-Komponente der App. Sie enthält eine native Benutzeroberfläche und eineBlazorWebView
Komponente, die den HTML-Teil der App hostet.
WebUI- und wwwroot-Ordner
Diese Ordner enthalten das Webpart der App, was dies zu einer Hybrid-App macht. Die Dateien und Ordner hier entsprechen genau dem, was eine Blazor-Web-App gefunden hat.
WebUI/_Imports.razor
– Enthält allgemeine Anweisungen für das Webpart der App.WebUI/App.razor
– Enthält den Standard Einstiegspunkt für das Webpart der App.WebUI/Pages
ordner: Enthält navigierbare Seiten, die mithilfe der Blazor-Websyntax erstellt wurden. Die.razor
hier aufgeführten Dateien rendern alle HTML und teilen den App-Zustand mit dem Rest der App.WebUI/Shared
ordner: Enthält freigegebene wiederverwendbare UI-Komponenten, die mithilfe der Blazor-Websyntax erstellt wurden. Die.razor
Dateien hier rendern alle HTML und werden auf anderen Seiten in der App verwendet. Dieser Ordner enthält auch dieMainLayout
Komponente, die die Gesamtform des Webparts der App definiert.wwwroot
ordner: Enthält statische Webressourcen, die im Webpart der App verwendet werden. Dies sind in der Regel CSS-Dateien und -Bilder.
Lassen Sie uns die interessanten Dateien untersuchen.
App.cs
Einstiegspunkt
Der Einstiegspunkt für die Benutzeroberfläche der App befindet sich auf dieser Seite. Es richtet die Dienste für die App ein und initialisiert dann die Benutzeroberfläche, indem eine Mobile Blazor Bindings-Komponente an das MainPage
-Element angefügt wird.
Es werden zwei Gruppen von Diensten registriert:
services.AddBlazorHybrid()
fügt die Dienste hinzu, die von Mobile Blazor Bindings zum Hosten von Blazor-Webkomponenten auf der nativen Benutzeroberfläche erforderlich sind.services.AddSingleton<CounterState>()
fügt einen app-spezifischen Dienst hinzu, der von überall in der Anwendung genutzt werden kann, einschließlich Codedateien, Blazor-Komponenten und anderen Diensten. Dies ist ein Singleton-Dienst, was bedeutet, dass höchstens ein instance erstellt wird, sodass der Zustand freigegeben werden kann.
Weitere Informationen zu Diensten und DI finden Sie im Thema Abhängigkeitsinjektion.
Main.razor
Seite der nativen Benutzeroberfläche
Dies ist die Standard native UI-Seite der App. Es enthält mehrere native Ui-Komponenten, z. B <Label>
. und <Button>
. Es enthält auch eine <BlazorWebView>
Komponente, die den Blazor-Webinhalt hostet:
<BlazorWebView VerticalOptions="LayoutOptions.FillAndExpand">
<FirstBlazorHybridApp.WebUI.App />
</BlazorWebView>
Ein paar weitere interessante Dinge:
- Mit
<FirstBlazorHybridApp.WebUI.App />
dem Tag verweist der native Teil der App auf das Webpart der App. - Die
@inject
-Direktive wird verwendet, um auf denCounterState
Dienst zu verweisen. - Die
OnInitialized
Methoden undDispose
werden implementiert, um einenStateChanged
Ereignishandler anzufügen/zu trennen, sodass diese UI-Seite aktualisiert wird, wenn derCounterState
Dienst angibt, dass sich der Leistungsindikator geändert hat.
CounterState.cs
-Dienst
Diese Klasse definiert einen Dienst, der in App.cs
registriert ist. Sie enthält Zustand, APIs und Ereignisse, die zum Nachverfolgen und Melden des Status des Indikators verwendet werden. Verschiedene Ui-Komponenten in der App verwenden diesen Dienst, um ihre Benutzeroberfläche anzuzeigen und wissen, wann sie aktualisiert werden müssen.
Weitere Informationen zu Diensten und DI finden Sie im Thema Abhängigkeitsinjektion.
WebUI/App.razor
Webeinstiegspunkt
Diese Datei ist der Standard Blazor-Einstiegspunkt für den Webpart der Anwendung. Es verwendet Standardmäßige Blazor-Funktionen, z. B. den Router. Diese Komponente bestimmt, welche Blazor-Webseite basierend auf der aktuellen Route angezeigt werden soll (oder zeigt einen Fehler an, wenn keine gefunden wurde).
WebUI/Shared/MainLayout.razor
Weblayout
Diese Komponente ist für die meisten Blazor-Web-Apps üblich und definiert das Gesamtlayout des Webparts der App. Hier können Sie allgemeine Elemente wie Navigation, Kopfzeilen und Fußzeilen einschließen, die im Webpart der App verwendet werden.
WebUI/Pages/Index.razor
Webseite
Enthält eine navigierbare Seite mit Webinhalten. Die Index
Seite ist in der Regel die Standardseite, die vor jeder Navigation geladen wird.
wwwroot
Ordner "statische Webressourcen"
Dieser Ordner enthält statische Webressourcen, die im Webpart der App verwendet werden. Das heißt, diese Dateien werden von der Webbrowserkomponente unverändert bereitgestellt. Auf sie wird mithilfe des statischen Blazor-Dateipfadmusters _content/<PROJECT_NAME>/path/to/the/file.css
verwiesen. In diesem Projekt wird beispielsweise auf eine CSS-Datei, die sich in wwwroot/css/bootstrap/bootstrap.min.css
befindet, als _content/FirstBlazorHybridApp/css/bootstrap/bootstrap.min.css
verwiesen.
Diese Dateien werden in die Anwendung eingebettet und von Mobile Blazor Bindings automatisch verarbeitet. Dateien in diesem Ordner können aus dem Code gelesen werden, indem sie den IFileProvider
Dienst verwenden und aufrufen FileProvider.GetFileInfo("_content/<PROJECT_NAME>/path/to/the/file.txt")
, wie in der Datei der App WebUI/Pages/FetchData.razor
zu sehen.
Dieses Projekt enthält die Bootstrap-CSS-Bibliothek, um Stile für allgemeine Benutzeroberflächenszenarien bereitzustellen.
index.html
Datei in den Android/iOS/macOS/Windows-Projekten
Jedes plattformspezifische Projekt enthält eine index.html
Datei, die die Containerseite für die Blazor-Webbenutzeroberfläche darstellt, und enthält Verweise auf die CSS-Dateien.
Der Speicherort der Datei auf jeder Plattform lautet wie folgt:
- Android:
wwwroot/index.html
- iOS:
Resources/wwwroot/index.html
- macOS:
Resources/wwwroot/index.html
- Windows:
wwwroot/index.html
Andere Dateien
Wir empfehlen Ihnen, alle Dateien in der Anwendung zu erkunden, um ihre Inhalte und ihre Interaktion zu erfahren.