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

MyMemoWiki

.NET Core Console

提供: MyMemoWiki
2021年7月3日 (土) 17:00時点におけるPiroto (トーク | 投稿記録)による版 (→‎.NET Core Console)
ナビゲーションに移動 検索に移動

| .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

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

実装

  • Progmras
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) {

            // 環境変数(dotnet run)もしくは、launch.json(デバッガ起動時) にて上書きする設定を指定する
            // 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;
        }
    }
}
  • 設定ロード先
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()
        {
        }
    }
}