Weitere ähnliche Inhalte
Ähnlich wie .NET CoreでのWindowsサービスの作り方と、Coreならではの便利な機能 (20)
Mehr von Study Group by SciencePark Corp. (20)
.NET CoreでのWindowsサービスの作り方と、Coreならではの便利な機能
- 3. • そろそろ.NET Core
• ASP.NET Coreの情報はたくさんある
• しかしデスクトップ開発では、Windowsサービスだってまだまだ現役
• .NET CoreでのWindowsサービスの作り方は?
3
- 7. • テンプレートに入っているIHostBuilderのコードに
• 次の1行を追加
• 完成!
Windowsサービス化:コード追加
7
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
.UseWindowsService()
- 10. • 例えば、WindowsサービスとgRPCのホスト(サーバー)を同じプロセスで持ちたい
• CreateHostBuilderで両方を入れるだけ
• 同じI/Fでまとめてホストし、まとめて開始・終了処理をやってくれる
IHostBuilderの便利なところ:複数ホストの管理
10
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
.UseWindowsService() //ここまでがWindowsサービス
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://localhost:51232");
webBuilder.UseStartup<Startup>();
}); //ここまでがgRPC
- 11. • ログ取得に使いたいクラスを入れておくと、 ILoggerにまとめてInjectionしてくれ
る
• Nlogを使う場合は、NuGetでNLog.Extensions.Hostingを追加
• IHostBuilderへ「.UseNLog()」を追加
• コンストラクタのILogger<>へ代入してくれる
IHostBuilderの便利なところ:ロガー
11
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseNLog()
public Worker(ILogger<Worker> logger, IDITestClass diTestClass)
- 12. • Microsoft.Extensions.DependencyInjectionが組み込まれている
• (手動で組み込めば他のプロジェクトでも使用可能)
• ※.NET Frameworkではアセンブリ参照の問題が多発しているのでやめた方が良い
• servicesに型を登録すると、その後に生成されるインスタンスへDIしてくれる
• 登録
• ↓インスタンスを作成してコンストラクタへ渡してくれる
IHostBuilderの便利なところ:DI
12
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<IDITestClass, DITestClass>();
services.AddHostedService<Worker>();
})
public Worker(ILogger<Worker> logger, IDITestClass diTestClass)
{
_diTestClass = diTestClass;