ASP.NET Core の Program
および Startup
クラスの進化
この記事では、さまざまな ASP.NET Core バージョンにおける Program
クラスと Startup
クラスの進化について説明します。
ASP.NET Core 6.x
ASP.NET Core 6.x では、Program
クラスと Startup
クラスに大きな変更が加えられています:
Program.Main()
テンプレート コードは必要ありません。 using
ディレクティブ。 Startup
クラスは不要になり、すべてのコードは Program
ファイル内にあります。 WebApplication
とWebApplicationBuilder
を紹介します。 ASP.NET Core 6.x の Program.cs
ファイルの例:
<code class="language-csharp">public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // 配置服务 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 配置 HTTP 请求管道 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); } }</code>
ASP.NET Core 3.x ~ 5.x
ASP.NET Core 3.x では、ワーカー サービスをサポートするための汎用ホスト ビルダーが導入されています。
<code class="language-csharp">public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }</code>
Startup
クラスはバージョン 2.x に似ています。
ASP.NET Core 2.x
ASP.NET Core 2.x では、Startup
は DI システムによって挿入されるため、IConfiguration
コンストラクターで
<code class="language-csharp">public Startup(IConfiguration configuration, IHostingEnvironment env) { this.HostingEnvironment = env; this.Configuration = configuration; }</code>
ASP.NET Core 1.x
ASP.NET Core 1.x では、Startup
に appsettings
ファイルを明示的にロードする必要があります:
<code class="language-csharp">public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); this.Configuration = builder.Build(); }</code>
appsettings.json
から値
appsettings.json
から値を取得するには、主に 2 つの方法があります:
簡単な方法
IConfiguration
を介して設定全体をコントローラーまたはクラスに挿入し、指定されたキーを使用して必要な値を取得します:
<code class="language-csharp">public class AccountController : Controller { private readonly IConfiguration _config; public AccountController(IConfiguration config) { _config = config; } public IActionResult ResetPassword() { var vm = new ResetPasswordViewModel { PasswordRequiredLength = _config.GetValue<int>("AppIdentitySettings:Password:RequiredLength"), RequireUppercase = _config.GetValue<bool>("AppIdentitySettings:Password:RequireUppercase") }; return View(vm); } }</code>
オプションパターン
複数の設定または複雑な設定の場合、オプション モードはクラスを使用して構成の階層を表します。
<code class="language-csharp">public class AppIdentitySettings { public UserSettings User { get; set; } public PasswordSettings Password { get; set; } public LockoutSettings Lockout { get; set; } } // ... (UserSettings, PasswordSettings, LockoutSettings classes as before) ...</code>
Startup
の ConfigureServices
に構成インスタンスを登録します: <code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings"); services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
IOptions<AppIdentitySettings>
を挿入します: <code class="language-csharp">public class AccountController : Controller { private readonly AppIdentitySettings _appIdentitySettings; public AccountController(IOptions<AppIdentitySettings> appIdentitySettingsAccessor) { _appIdentitySettings = appIdentitySettingsAccessor.Value; } public IActionResult ResetPassword() { var vm = new ResetPasswordViewModel { PasswordRequiredLength = _appIdentitySettings.Password.RequiredLength, RequireUppercase = _appIdentitySettings.Password.RequireUppercase }; return View(vm); } }</code>
以上がASP.NET Core のプログラムとスタートアップ クラスは、さまざまなバージョンでどのように進化してきましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。