首頁 > 後端開發 > C++ > ASP.NET Core 的程式和啟動類別在不同版本中是如何演變的?

ASP.NET Core 的程式和啟動類別在不同版本中是如何演變的?

Linda Hamilton
發布: 2025-01-13 16:09:43
原創
576 人瀏覽過

How Have ASP.NET Core's Program and Startup Classes Evolved Across Different Versions?

ASP.NET Core 的 ProgramStartup 類別演變

本文探討 ProgramStartup 類別在不同 ASP.NET Core 版本中的演變歷程。

ASP.NET Core 6.x

ASP.NET Core 6.x 對 ProgramStartup 類別進行了重大變更:

  • 使用頂層語句時,無需 Program.Main() 模板程式碼。
  • 隱式 using 指令。
  • 不再需要 Startup 類,所有程式碼都位於 Program 檔案中。
  • 引入 WebApplicationWebApplicationBuilder

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)

對於多個或複雜的設置,選項模式使用類別來表示配置的層次結構:

  1. 定義配置類別來表示應用程式設定的結構。例如:
<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>
登入後複製
  1. StartupConfigureServices 中註冊設定實例:
<code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
登入後複製
  1. 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板