ハイブリッド Hello World - どのように動作しますか?
重要
このプロジェクトは実験的なリリースです。 試験的なモバイル Blazor バインディングを試して、で https://github.com/xamarin/MobileBlazorBindingsフィードバックを提供することを願っています。
注意
このページは、 最初のハイブリッド アプリのビルド に関するチュートリアルの続きです。 続行する前に、このチュートリアルを完了することをお勧めします。
ヒント
より簡単な例については、最初のアプリのビルドに関するチュートリアルと、Blazor のいくつかのより基本的な機能を示す後続のHello Worldチュートリアルから始めます。
前のチュートリアルで作成した最初のプロジェクトを見て、ハイブリッド アプリに Experimental Mobile Blazor Bindings を使用する方法の詳細を理解しましょう。
確認するメイン プロジェクトは、ファイルを含む.razor
共有プロジェクトです。 プラットフォーム固有のプロジェクトには、Experimental Mobile Blazor Bindings に固有の最小限のコードのみが含まれています。
共有プロジェクトの注目すべきファイルとフォルダーは次のとおりです。
ルート フォルダー
-
_Imports.razor
- このフォルダーとそのサブフォルダー内の他.razor
のすべてのファイルに適用される共通ディレクティブが含まれます。 サブフォルダーには、追加のディレクティブを含む独自_Imports.razor
のファイルを含めることができます。 このファイルで最も一般的なディレクティブの種類は@using
、 ディレクティブです。これは、C#using
ステートメントとまったく同じように、名前空間をファイルに.razor
インポートするために使用されます。 -
App.cs
- 基本クラスから派生したクラスで表される、アプリケーションのメイン UI エントリ ポイントがXamarin.Forms.Application
含まれます。 このクラスのコンストラクターは、ホストをインスタンス化し、ホストにサービスを追加した後、ホストを使用して、 という名前Main
の Blazor コンポーネントを メイン アプリケーション ページに追加します。 -
CounterState.cs
- カウンター値を追跡し、関連する API を提供するサービスが含まれます。 このサービスは、アプリのネイティブ部分と HTML 部分の両方で使用されます。 -
Main.razor
- アプリのメイン Blazor UI コンポーネントが含まれます。 これには、ネイティブ UI と、アプリの HTML 部分をBlazorWebView
ホストするコンポーネントが含まれています。
WebUI フォルダーと wwwroot フォルダー
これらのフォルダーにはアプリの Web パーツが含まれており、これがハイブリッド アプリになります。 ここでのファイルとフォルダーは、Blazor Web アプリが見つかった内容とよく一致します。
-
WebUI/_Imports.razor
- アプリの Web パーツの共通ディレクティブが含まれています。 -
WebUI/App.razor
- アプリの Web パーツのメインエントリ ポイントが含まれます。 -
WebUI/Pages
folder - Blazor Web 構文を使用して作成されたナビゲーション可能なページが含まれます。 ここでのファイルはすべて.razor
HTML をレンダリングし、アプリの状態をアプリの残りの部分と共有します。 -
WebUI/Shared
folder - Blazor Web 構文を使用して作成された共有の再利用可能な UI コンポーネントが含まれます。 ここでのファイルはすべて.razor
HTML をレンダリングし、アプリ内の他のページで使用されます。 このフォルダーには、アプリのMainLayout
Web パーツの全体的な形状を定義するコンポーネントも含まれています。 -
wwwroot
folder - アプリの Web パーツで使用される静的 Web 資産が含まれます。 これは通常、CSS ファイルとイメージです。
興味深いファイルを見てみましょう。
App.cs
エントリ ポイント
アプリの UI のエントリ ポイントはこのページにあります。 アプリのサービスを設定し、Mobile Blazor Bindings コンポーネントを 要素にアタッチして UI を MainPage
初期化します。
次の 2 つのサービス セットが登録されます。
-
services.AddBlazorHybrid()
は、ネイティブ UI で Blazor Web コンポーネントをホストするために Mobile Blazor Bindings に必要なサービスを追加します。 -
services.AddSingleton<CounterState>()
は、コード ファイル、Blazor コンポーネント、その他のサービスなど、アプリケーション内のどこからでも使用できるアプリ固有のサービスを追加します。 これはシングルトン サービスです。つまり、最大で 1 つのインスタンスが作成されるため、状態を共有できます。
サービスと DI の詳細については、 依存関係の挿入に関するトピックを参照してください。
Main.razor
ネイティブ UI ページ
これは、アプリのメインネイティブ UI ページです。 これには、 や <Button>
など<Label>
、いくつかのネイティブ UI コンポーネントが含まれています。 また、Blazor Web コンテンツを <BlazorWebView>
ホストするコンポーネントも含まれています。
<BlazorWebView VerticalOptions="LayoutOptions.FillAndExpand">
<FirstBlazorHybridApp.WebUI.App />
</BlazorWebView>
その他の興味深い点:
- タグは
<FirstBlazorHybridApp.WebUI.App />
、アプリのネイティブ部分がアプリの Web パーツを参照する方法です。 - ディレクティブは
@inject
、サービスを参照するために使用されますCounterState
。 -
OnInitialized
メソッドとDispose
メソッドは、カウンターが変更されたことをサービスが示すたびにCounterState
この UI ページが更新されるように、イベント ハンドラーをアタッチまたはデタッチStateChanged
するために実装されます。
CounterState.cs
サービス
このクラスは、 に登録されているサービスを App.cs
定義します。 これには、カウンターの状態を追跡および報告するために使用される状態、API、およびイベントが含まれています。 アプリ内のさまざまな UI コンポーネントは、このサービスを使用して UI を表示し、更新するタイミングを把握します。
サービスと DI の詳細については、 依存関係の挿入に関するトピックを参照してください。
WebUI/App.razor
Web エントリ ポイント
このファイルは、アプリケーションの Web パーツのメイン Blazor エントリ ポイントです。 ルーターなどの標準の Blazor 機能を使用 します。 このコンポーネントは、現在のルートに基づいて表示する Blazor Web ページを決定します (見つからない場合はエラーが表示されます)。
WebUI/Shared/MainLayout.razor
Web レイアウト
ほとんどの Blazor Web アプリに共通するこのコンポーネントは、アプリの Web パーツの全体的なレイアウトを定義します。 ここでは、アプリの Web パーツで使用されるナビゲーション、ヘッダー、フッターなどの一般的な要素を含めることができます。
WebUI/Pages/Index.razor
Web ページ
Web コンテンツのナビゲーション可能なページが含まれます。 ページは Index
通常、ナビゲーションの前に読み込まれる既定のページです
wwwroot
静的 Web アセット フォルダー
このフォルダーには、アプリの Web パーツで使用される静的 Web 資産が含まれています。 つまり、これらのファイルは Web ブラウザー コンポーネントによってそのまま提供されます。 これらは、Blazor 静的ファイル パス パターン () を _content/<PROJECT_NAME>/path/to/the/file.css
使用して参照されます。 たとえば、このプロジェクトでは、 にある wwwroot/css/bootstrap/bootstrap.min.css
CSS ファイルが として _content/FirstBlazorHybridApp/css/bootstrap/bootstrap.min.css
参照されます。
これらのファイルはアプリケーションに埋め込まれるので、Mobile Blazor Bindings によって自動的に処理されます。 このフォルダー内のファイルは、アプリWebUI/Pages/FetchData.razor
のファイルに示されているように、 サービスをIFileProvider
使用して を呼び出FileProvider.GetFileInfo("_content/<PROJECT_NAME>/path/to/the/file.txt")
すことによって、コードから読み取ることができます。
このプロジェクトには、一般的な UI シナリオのスタイルを提供するブートストラップ CSS ライブラリが含まれています。
index.html
Android/iOS/macOS/Windows プロジェクトのファイル
各プラットフォーム固有のプロジェクトには index.html
、Blazor Web UI のコンテナー ページであるファイルが含まれており、CSS ファイルへの参照が含まれています。
各プラットフォーム上のファイルの場所は次のとおりです。
- Android:
wwwroot/index.html
- iOS:
Resources/wwwroot/index.html
- macOS:
Resources/wwwroot/index.html
- Windows:
wwwroot/index.html
その他のファイル
アプリケーション内のすべてのファイルを調べて、その内容とやり取り方法を学習することをお勧めします。