Blazor Hybrid

.NET6からBlazor Hybridというものが追加された。

これは、MAUIやWPF,Windows FormsでRazorコンポーネントを動かそうと言う物だが、実際には、Razorコンポーネントが動作する、WebViewコントロールを画面に配置して、画面の一部として、Razorコンポーネントを実行するものである。

今のところ、このコントロールとホスト側の連携機能はほぼ無い(動作させるRazorコンポーネントをホスト側から指定することは可能。) ホスト側でSingletonクラスを作成してserviceに追加することで、razorコンポーネントからは@injectを通じて参照,更新が可能。もちろん、ホスト側も同じオブジェクトへの参照,更新が可能。

public Form1()
{
    InitializeComponent();
    var services = new ServiceCollection();
	// BlazorWebViewサービスの追加
    services.AddWindowsFormsBlazorWebView();
	// 通信用クラスの作成
    hostIF = new();
	// Singletonサービスの追加
	// Gradation.razorからは@inject IHostInterace <変数名>で使用可能
    services.AddSingleton<IHostInterface>(hostIF);
	// ホストからのメッセージ
    hostIF.Message = "From Host";
    blazorView.HostPage = @"wwwroot\index.html";
    blazorView.Services = services.BuildServiceProvider();
    blazorView.RootComponents.Add<Gradation>("#app");
}
@inject IHostInterface HostIF
・・・
<span>@HostIF.Message</span>

下記の画面キャプチャはWindows Forms上での例。

まぁ、まだ出たばかりなので、ホスト側との連携機能などは今後に期待したいところだ。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: .NET, Blazor, C#, 技術系 パーマリンク

Blazor Hybrid への1件のコメント

  1. takezou のコメント:

    SingletonクラスにeventやActionを加えることにより、相互にイベントのハンドリングが可能となります。
    例えば、ホスト用にActionを追加して、コンポーネントロード時に、StateHasChangedを呼び出すようなコードを設定しておけば、Singleton内の値を変更した後、ホスト側からコンポーネントの再描画が可能ですし、eventを作成してホスト側のイベントハンドラを設定しておけば、コンポーネント側から、イベントを発生させて、ホスト側のイベントハンドラを呼び出すことができます。
    (上記の場合、Singletonクラス内にevent呼出用メソッドが必要になりますが)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください