「.NET Core Console」の版間の差分
ナビゲーションに移動
検索に移動
| (同じ利用者による、間の9版が非表示) | |||
| 1行目: | 1行目: | ||
| [[.NET Core]] | [[ASP.NET Core]] | [[C Sharp]] | | | [[.NET Core]] | [[ASP.NET Core]] | [[C Sharp]] | | ||
| − | ==.NET Core Console== | + | ==.NET Core Console/Worker== |
| − | + | ==汎用HOST== | |
*https://docs.microsoft.com/ja-jp/dotnet/core/extensions/generic-host | *https://docs.microsoft.com/ja-jp/dotnet/core/extensions/generic-host | ||
| − | |||
===プロジェクト作成=== | ===プロジェクト作成=== | ||
<pre> | <pre> | ||
| − | $ dotnet new | + | $ dotnet new worker -o docweb_bat2 |
$ dotnet new gitignore | $ dotnet new gitignore | ||
</pre> | </pre> | ||
| 29行目: | 28行目: | ||
</pre> | </pre> | ||
===実装=== | ===実装=== | ||
| − | + | ---- | |
| + | ====Progmram.cs==== | ||
<pre> | <pre> | ||
using System; | using System; | ||
| − | using System. | + | using System.Collections.Generic; |
| − | using | + | using System.Linq; |
| − | using | + | using System.Threading.Tasks; |
| − | using | + | using docweb_bat2.Models; |
| + | using docweb_bat2.Services; | ||
using Microsoft.Extensions.Configuration; | using Microsoft.Extensions.Configuration; | ||
using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||
| + | using Microsoft.Extensions.Hosting; | ||
| + | using Microsoft.Extensions.Logging; | ||
using Microsoft.Extensions.Options; | using Microsoft.Extensions.Options; | ||
| − | namespace | + | namespace docweb_bat2 |
{ | { | ||
public class Program | public class Program | ||
{ | { | ||
| − | static void Main(string[] args) | + | public static void Main(string[] args) |
{ | { | ||
| − | + | CreateHostBuilder(args).Build().Run(); | |
| − | + | } | |
| − | |||
| − | + | public static IHostBuilder CreateHostBuilder(string[] args) => | |
| − | + | Host.CreateDefaultBuilder(args) | |
| − | + | .ConfigureLogging((hostContext, builder) => | |
| − | + | { | |
| − | . | + | builder.ClearProviders(); |
| + | builder.AddLog4Net(); | ||
| + | }) | ||
| + | .ConfigureServices((hostContext, services) => | ||
| + | { | ||
| + | // requires using Microsoft.Extensions.Options | ||
| + | services.Configure<DocumentWebDatabaseSettings>( | ||
| + | hostContext.Configuration.GetSection(nameof(DocumentWebDatabaseSettings))); | ||
| − | + | services.AddSingleton<IDocumentWebDatabaseSettings>(sp => | |
| − | + | sp.GetRequiredService<IOptions<DocumentWebDatabaseSettings>>().Value); | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | services.AddSingleton<IConfiguration>(hostContext.Configuration); | |
| − | + | services.AddSingleton<DocumentWebService>(); | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | services.AddHostedService<Worker>(); | |
| − | + | }) | |
| − | + | ; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
} | } | ||
</pre> | </pre> | ||
| − | + | ====設定ロード先==== | |
<pre> | <pre> | ||
namespace docWeb.Models | namespace docWeb.Models | ||
| 112行目: | 98行目: | ||
</pre> | </pre> | ||
| − | + | ====ワーカー==== | |
<pre> | <pre> | ||
| − | + | using 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 | + | public class Worker : BackgroundService |
{ | { | ||
| − | + | private readonly ILogger<Worker> _logger; | |
| − | public DocumentWebService( | + | |
| + | private IConfiguration _config; | ||
| + | private DocumentWebService _service; | ||
| + | |||
| + | static readonly HttpClient client = new HttpClient(); | ||
| + | |||
| + | public Worker(ILogger<Worker> logger, IConfiguration config, DocumentWebService service) | ||
| + | { | ||
| + | _logger = logger; | ||
| + | _config = config; | ||
| + | _service = service; | ||
| + | } | ||
| + | |||
| + | protected override async Task ExecuteAsync(CancellationToken stoppingToken) | ||
{ | { | ||
| + | : | ||
} | } | ||
| + | } | ||
} | } | ||
} | } | ||
</pre> | </pre> | ||
| − | * | + | ===Hostedアプリケーションの停止をプログラムから=== |
| + | <pre> | ||
| + | IHostApplicationLifetime _lifeTime; | ||
| + | public MyClass(IHostApplicationLifetime lifeTime) | ||
| + | { | ||
| + | _lifeTime = lifeTime; | ||
| + | } | ||
| + | </pre> | ||
| + | *停止 | ||
<pre> | <pre> | ||
| − | + | public void Exit() | |
{ | { | ||
| − | public class | + | _lifeTime.StopApplication(); |
| − | { | + | } |
| − | + | </pre> | |
| − | + | ==汎用HOSTで実施したことをConsoleで== | |
| + | <pre> | ||
| + | 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 Program | ||
| + | { | ||
| + | static void Main(string[] args) | ||
{ | { | ||
| − | + | IServiceCollection services = new ServiceCollection(); | |
| + | |||
| + | var configuration = GetConfiguration(args); | ||
| + | |||
| + | // require Microsoft.Extensions.Configuration.Binder | ||
| + | IDocumentWebDatabaseSettings dbSettings | ||
| + | = configuration.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(); | ||
| + | |||
} | } | ||
| − | + | private 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> | </pre> | ||
2021年7月4日 (日) 10:07時点における最新版
| .NET Core | ASP.NET Core | C Sharp |
目次
.NET Core Console/Worker
汎用HOST
プロジェクト作成
$ dotnet new worker -o docweb_bat2 $ dotnet new gitignore
NuGet
Configuration
dotnet add package Microsoft.Extensions.Configuration.Json --version 5.0.0 dotnet add package Microsoft.Extensions.Configuration.CommandLine --version 5.0.0
Logging
- Log4net
dotnet add package Microsoft.Extensions.Logging.Log4Net.AspNetCore --version 5.0.3
DI
dotnet add package Microsoft.Extensions.DependencyInjection --version 5.0.1 dotnet add package Microsoft.Extensions.Options --version 5.0.0 dotnet add package Microsoft.Extensions.Configuration.Binder --version 5.0.0
実装
Progmram.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using docweb_bat2.Models;
using docweb_bat2.Services;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace docweb_bat2
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, builder) =>
{
builder.ClearProviders();
builder.AddLog4Net();
})
.ConfigureServices((hostContext, services) =>
{
// requires using Microsoft.Extensions.Options
services.Configure<DocumentWebDatabaseSettings>(
hostContext.Configuration.GetSection(nameof(DocumentWebDatabaseSettings)));
services.AddSingleton<IDocumentWebDatabaseSettings>(sp =>
sp.GetRequiredService<IOptions<DocumentWebDatabaseSettings>>().Value);
services.AddSingleton<IConfiguration>(hostContext.Configuration);
services.AddSingleton<DocumentWebService>();
services.AddHostedService<Worker>();
})
;
}
}
設定ロード先
namespace docWeb.Models
{
public interface IDocumentWebDatabaseSettings
{
string DocumentWebCollectionName { get; set; }
string ConnectionString { get; set; }
string DatabaseName { get; set; }
}
public class DocumentWebDatabaseSettings : IDocumentWebDatabaseSettings
{
public string DocumentWebCollectionName { get; set; }
public string ConnectionString { get; set; }
public string DatabaseName { get; set; }
}
}
ワーカー
using 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 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, DocumentWebService service)
{
_logger = logger;
_config = config;
_service = service;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
:
}
}
}
}
Hostedアプリケーションの停止をプログラムから
IHostApplicationLifetime _lifeTime;
public MyClass(IHostApplicationLifetime lifeTime)
{
_lifeTime = lifeTime;
}
- 停止
public void Exit()
{
_lifeTime.StopApplication();
}
汎用HOSTで実施したことをConsoleで
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 Program
{
static void Main(string[] args)
{
IServiceCollection services = new ServiceCollection();
var configuration = GetConfiguration(args);
// require Microsoft.Extensions.Configuration.Binder
IDocumentWebDatabaseSettings dbSettings
= configuration.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();
}
private 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;
}
}
}
© 2006 矢木浩人