| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
2,314 バイト追加 、 2021年7月4日 (日) 10:07
| [[.NET Core]] | [[ASP.NET Core]] | [[C Sharp]] |
==.NET Core Console/Worker====汎用HOST==*https://docs.microsoft.com/ja-jp/dotnet/core/extensions/generic-host
==設定とDIを組み込んだテンプレート==
===プロジェクト作成===
<pre>
$ dotnet new console worker -o docweb_batdocweb_bat2
$ dotnet new gitignore
</pre>
<pre>
dotnet add package Microsoft.Extensions.Configuration.Json --version 5.0.0
dotnet add package Microsoft.Extensions.Configuration.CommandLine --version 5.0.0
</pre>
====Logging====
*Log4net
<pre>
dotnet add package Microsoft.Extensions.Logging.Log4Net.AspNetCore --version 5.0.3
</pre>
 
====DI====
<pre>
</pre>
===実装===
*Progmras----====Progmram.cs====
<pre>
using System;
using System.IOCollections.Generic;using System.Linq;using docwebSystem.Threading.ServicesTasks;using docWebdocweb_bat2.Models;using docweb_batdocweb_bat2.JobsServices;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace docweb_batdocweb_bat2
{
public class Program
{
public static void Main(string[] args)
{
IServiceCollection services = new ServiceCollectionCreateHostBuilder(args); var configuration = GetConfiguration.Build().Run(); }
// 設定を設定管理オブジェクトに読み込む public static IHostBuilder CreateHostBuilder(string[] args) => // require MicrosoftHost.Extensions.Configuration.Binder IDocumentWebDatabaseSettings dbSettings CreateDefaultBuilder(args) = configuration.GetSectionConfigureLogging(nameof(DocumentWebDatabaseSettings)hostContext, builder)=> { builder.Get<DocumentWebDatabaseSettings>ClearProviders();  // DIによりオブジェクト関連を構築 services builder.AddSingleton<IDocumentWebDatabaseSettings>AddLog4Net(sp => dbSettings); services.AddSingleton<DocumentWebService>( }); // JOBS services .AddSingleton<GetCollection>ConfigureServices((hostContext, services);=> { // 作業を行うオブジェクトをサービスから取り出し実行requires using Microsoft.Extensions.Options var job = services.BuildServiceProvider().GetServiceConfigure<GetCollectionDocumentWebDatabaseSettings>(); job hostContext.Configuration.RunGetSection(nameof(DocumentWebDatabaseSettings))); }
// 設定のロード private static IConfiguration GetConfiguration() {  // 環境変数(dotnet run)もしくは、launch services.jsonAddSingleton<IDocumentWebDatabaseSettings>(デバッガ起動時) にて上書きする設定を指定する // export DECWEB_ENVsp =Development> // or launch.json configurations sp.env section var environmentName = Environment.GetEnvironmentVariableGetRequiredService<IOptions<DocumentWebDatabaseSettings>>("DOCWEB_ENV"); // 環境変数 Console.WriteLine($"Environment:{environmentName}"Value);
services.AddSingleton<IConfiguration configuration = new ConfigurationBuilder() .SetBasePath>(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", true, true) // 設定ファイルの一部に含める ex appsettings.Development.json .AddJsonFile($"appsettings.{environmentName}hostContext.json", true, trueConfiguration); services.BuildAddSingleton<DocumentWebService>();
return configuration services.AddHostedService<Worker>(); }) ;
}
}
</pre>
*====設定ロード先====
<pre>
namespace docWeb.Models
</pre>
*サービス====ワーカー====
<pre>
namespace docwebusing System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.Text;using System.Threading;using System.Threading.Tasks;using docweb_bat2.Services;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;using MongoDB.Bson;using MongoDB.Driver;using Newtonsoft.Json; namespace docweb_bat2
{
public class DocumentWebService Worker : BackgroundService
{
// コンストラクタインジェクションprivate readonly ILogger<Worker> _logger;  private IConfiguration _config; private DocumentWebService _service;  static readonly HttpClient client = new HttpClient();  public Worker(ILogger<Worker> logger, IConfiguration config, DocumentWebServiceservice) { _logger = logger; _config = config; _service = service; }  protected override async Task ExecuteAsync(IDocumentWebDatabaseSettings settingsCancellationToken stoppingToken)
{
}
}
}
}
</pre>
===Hostedアプリケーションの停止をプログラムから===<pre>IHostApplicationLifetime _lifeTime;public MyClass(IHostApplicationLifetime lifeTime){ _lifeTime = lifeTime;}</pre>*JOB停止<pre>public void Exit(){ _lifeTime.StopApplication();}</pre>==汎用HOSTで実施したことをConsoleで==
<pre>
namespace using System;using System.IO;using docweb.Services;using docWeb.Models;using docweb_bat.Jobs;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Options; namespace docweb_bat
{
public class GetCollectionProgram { DocumentWebService _service; public GetCollectionstatic void Main(DocumentWebService servicestring[] args)
{
thisIServiceCollection services = new ServiceCollection(); var configuration = GetConfiguration(args); // require Microsoft.Extensions.Configuration._service Binder IDocumentWebDatabaseSettings dbSettings = serviceconfiguration.GetSection(nameof(DocumentWebDatabaseSettings)) .Get<DocumentWebDatabaseSettings>();  // DI services.AddSingleton<IConfiguration>(configuration); services.AddSingleton<IDocumentWebDatabaseSettings>(sp => dbSettings); services.AddSingleton<DocumentWebService>();  // JOBS services.AddSingleton<GetCollection>();  var job = services.BuildServiceProvider().GetService<GetCollection>(); job.Run()
}
public void Runprivate static IConfiguration GetConfiguration(string[] args){ // export DECWEB_ENV=Development // or launch.json configurations.env section var environmentName = Environment.GetEnvironmentVariable("DOCWEB_ENV"); Console.WriteLine($"Environment:{environmentName}");  IConfiguration configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{environmentName}.json", true, true) .AddCommandLine(args) .Build();  return configuration;
}
}
}
</pre>

案内メニュー