.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上での例。

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