この記事は公開から2年以上経過しています。
Webサービスではお馴染みのDependency Injectionを.NET 6のコンソールアプリケーション(バックグラウンドタスク)で利用するサンプル。
サンプルソースコード(C#)
ConsoleAppDISample.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
</ItemGroup>
</Project>
※NuGetのMicrosoft.Extensions.Hosting
パッケージを追加。
Program.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
// 汎用ホストの生成
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
services
.AddHostedService<MainService>() // バックグラウンドタスク(ホステッド)サービスを追加
.AddSingleton<ISubService, SubService>() // シングルトンの依存サービスをを追加
)
.Build()
.Run();
// バックグラウンドタスク(ホステッド)サービスクラス
internal sealed class MainService : IHostedService, IDisposable
{
// コンストラクタインジェクション
public MainService(ISubService di)
{
di.Do();
}
public void Dispose() { }
public Task StartAsync(CancellationToken cancellationToken)
{
// ダミー
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
// ダミー
return Task.CompletedTask;
}
}
// DIサービスI/F
internal interface ISubService
{
void Do();
}
// DIサービスクラス
internal sealed class SubService : ISubService, IDisposable
{
private readonly ILogger<SubService> _logger;
// コンストラクタインジェクション
public SubService(ILogger<SubService> logger)
{
_logger = logger;
}
public void Dispose() { }
public void Do()
{
_logger.LogInformation("DIサービスが実行されました");
}
}
参考ウェブサイトなど
- Microsoft Docs
.NET での依存関係の挿入
以上です。