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

MyMemoWiki

「.NET Core Console」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
29行目: 29行目:
 
</pre>
 
</pre>
 
===実装===
 
===実装===
*Progmras
+
*Progmram.cs
 
<pre>
 
<pre>
 
using System;
 
using System;
using System.IO;
+
using System.Collections.Generic;
using docweb.Services;
+
using System.Linq;
using docWeb.Models;
+
using System.Threading.Tasks;
using docweb_bat.Jobs;
+
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 docweb_bat
+
namespace docweb_bat2
 
{
 
{
 
     public class Program
 
     public class Program
 
     {
 
     {
         static void Main(string[] args)
+
         public static void Main(string[] args)
 
         {
 
         {
             IServiceCollection services = new ServiceCollection();
+
             CreateHostBuilder(args).Build().Run();
           
+
        }
            var configuration = GetConfiguration(args);
 
 
              
 
              
            // 設定を設定管理オブジェクトに読み込む
+
        public static IHostBuilder CreateHostBuilder(string[] args) =>
             // require Microsoft.Extensions.Configuration.Binder
+
             Host.CreateDefaultBuilder(args)
            IDocumentWebDatabaseSettings dbSettings
+
                 .ConfigureLogging((hostContext, builder) =>
                 = configuration.GetSection(nameof(DocumentWebDatabaseSettings))
+
                {
                     .Get<DocumentWebDatabaseSettings>();
+
                     builder.ClearProviders();
 
+
                    builder.AddLog4Net();
            // DIによりオブジェクト関連を構築
+
                })
            services.AddSingleton<IConfiguration>(configuration);
+
                .ConfigureServices((hostContext, services) =>
            services.AddSingleton<IDocumentWebDatabaseSettings>(sp => dbSettings);
+
                {
            services.AddSingleton<DocumentWebService>();
+
                    // requires using Microsoft.Extensions.Options
            // JOBS
+
                    services.Configure<DocumentWebDatabaseSettings>(
            services.AddSingleton<GetCollection>();
+
                        hostContext.Configuration.GetSection(nameof(DocumentWebDatabaseSettings)));
  
            // 作業を行うオブジェクトをサービスから取り出し実行
+
                    services.AddSingleton<IDocumentWebDatabaseSettings>(sp =>
            var job = services.BuildServiceProvider().GetService<GetCollection>();
+
                        sp.GetRequiredService<IOptions<DocumentWebDatabaseSettings>>().Value);
            job.Run();
 
        }
 
  
        // 設定のロード
+
                    services.AddSingleton<IConfiguration>(hostContext.Configuration);
        private static IConfiguration GetConfiguration(string[] args) {
+
                    services.AddSingleton<DocumentWebService>();
  
            // 環境変数(dotnet run)もしくは、launch.json(デバッガ起動時) にて上書きする設定を指定する
+
                    services.AddHostedService<Worker>();
            // 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)
 
                // 設定ファイルの一部に含める ex appsettings.Development.json
 
                 .AddJsonFile($"appsettings.{environmentName}.json", true, true)
 
                // コマンドライン引数も格納DI
 
                 .AddCommandLine(args)
 
                .Build();
 
 
 
            return configuration;
 
        }
 
 
     }
 
     }
 
}
 
}

2021年7月4日 (日) 05:37時点における版

| .NET Core | ASP.NET Core | C Sharp |

.NET Core Console

汎用HOST

設定とDIを組み込んだテンプレート

プロジェクト作成

$ dotnet new console -o docweb_bat
$ 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; }
    }
}

*サービス

namespace docweb.Services
{
    public class DocumentWebService 
    {
        // コンストラクタインジェクション
        public DocumentWebService(IConfiguration configuration,  IDocumentWebDatabaseSettings settings)
        {
        }
    }
}
  • JOB
namespace docweb_bat.Jobs
{
    public class GetCollection
    {   
        DocumentWebService _service;
        public GetCollection(DocumentWebService service) 
        {
            this._service = service;
        }
        public void Run()
        {
        }
    }
}