ChatGPTにHostについて聞いてみました(続き)。
タイトル、文章、イラスト: ChatGPT
登場人物
- ミナト(左): MVVMを初めて触るGUIアプリ開発プロジェクトに参加中。Hostの便利さを知っている。
- ハルカ(右): 社内のWPFおよび.NET全般に詳しい先輩。構成の気持ちいい設計が大好き。
1. MVVMって、Hostと無縁?
ミナト「先輩、最近WPFのプロジェクトに入ったんですけど……Host、使ってないんですよ」
ハルカ「あ~、あるある。GUI系のプロジェクトって、昔ながらの構成が多いからね」
ミナト「でも、Host使えば設定・ログ・DIぜんぶまとめられて便利じゃないですか? GUIでも使えたら……って思って」
ハルカ「ナイス視点! それ、実は全然アリなんだよ」
2. GUIアプリでもHostは使える!
ハルカ「HostってWebアプリのものって思われがちだけど、GUIアプリでも全然使えるのよ。むしろ使った方が設計がスッキリする」
ミナト「でもGUIアプリってApp.xaml.csがスタート地点ですよね? そこにHostって……」
ハルカ「そのApp.xaml.csのOnStartupで、Hostを作ってしまえばOK!」
最小構成のサンプルコード(WPF)
C#:
public partial class App : Application
{
public IHost Host { get; }
public App()
{
Host = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) =>
{
services.AddSingleton<MainWindow>();
services.AddSingleton<MainViewModel>();
})
.Build();
}
protected override async void OnStartup(StartupEventArgs e)
{
await Host.StartAsync();
var window = Host.Services.GetRequiredService<MainWindow>();
window.Show();
base.OnStartup(e);
}
}
ミナト「おおっ……! Hostをアプリの最初に作って、Windowの解決にも使える!」
ハルカ「そう。しかもここでViewModelもDI登録しておけば、ViewとViewModelのバインディングもスマートにできるんだ」
3. MVVMのDIとの相性
ミナト「MVVMって、ViewModelのテストもしやすくなるし、DIが合いますよね」
ハルカ「うん、ViewModelの構築をHost経由にすると、依存関係が一元管理できて本当にラクになる」
ミナト「じゃあ、ViewModelの中にサービスを注入するのもHostで完結?」
C#:
ハルカ「もちろん」
ViewModelへの依存注入の例
public class MainViewModel
{
private readonly ILogger<MainViewModel> _logger;
public MainViewModel(ILogger<MainViewModel> logger)
{
_logger = logger;
_logger.LogInformation("MainViewModel initialized.");
}
}
ミナト「お~! ViewModelにILogger注入してるの、めっちゃいいですね」
ハルカ「これでログ出力も設定も、Host流の統一ルールで扱えるようになるってわけ」
4. GUIアプリでHostを使うメリット
| メリット | 説明 |
|---|---|
| DIが使える | ViewModel・サービスの注入が簡単に |
| 設定・ログも一元管理 | appsettings.json の読み込みや ILogger の導入が容易 |
| テストしやすい構成 | モックやテストHostを使った単体テストに強い |
| 構成が近代的 | Webアプリやバッチとアーキテクチャが統一できる |
ミナト「なんか……今までのWPFのコードが職人芸に見えてきました……」
ハルカ「そこにHostを入れると、モダンな分業できるコードになるのよ」
5. まとめ: GUIアプリ × Host、むしろ相性いい!
ミナト「GUIアプリって特殊なものかと思ってましたけど、Hostを導入するとアプリとしての設計が整うんですね」
ハルカ「そう! UI層はUI層、ロジックはロジックで、Hostが全体をつなぐ役になってくれる」
ミナト「やってみたくなってきました!」
ハルカ「じゃあ次は、IHostedServiceでバックグラウンド監視を入れてみるとかどう?」

0 件のコメント:
コメントを投稿