ASP.NET Core 的 Program
和 Startup
類別演變
本文探討 Program
和 Startup
類別在不同 ASP.NET Core 版本中的演變歷程。
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
建構函式中實例化 IConfiguration
,因為它由 DI 系統注入:
<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
取得值:
簡單方法
透過 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>
選項模式 (Options Pattern)
對於多個或複雜的設置,選項模式使用類別來表示配置的層次結構:
<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中文網其他相關文章!