Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Program Teras ASP.NET dan Kelas Permulaan Berevolusi Merentas Versi Berbeza?

Bagaimanakah Program Teras ASP.NET dan Kelas Permulaan Berevolusi Merentas Versi Berbeza?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 16:09:43568semak imbas

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

Evolusi kelas Program dan Startup ASP.NET Core

Artikel ini meneroka evolusi kelas Program dan Startup dalam versi Teras ASP.NET yang berbeza.

ASP.NET Core 6.x

ASP.NET Core 6.x mempunyai perubahan besar pada kelas Program dan Startup:

  • Tidak memerlukan Program.Main() kod templat apabila menggunakan pernyataan peringkat teratas.
  • Arahan using Tersirat.
  • Kelas Startup tidak diperlukan lagi, semua kod ada dalam fail Program.
  • Memperkenalkan WebApplication dan WebApplicationBuilder.

Contoh fail Program.cs untuk ASP.NET Core 6.x:

<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 Teras 3.x hingga 5.x

ASP.NET Core 3.x memperkenalkan pembina hos generik untuk menyokong perkhidmatan pekerja:

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

Startup adalah serupa dengan versi 2.x.

ASP.NET Core 2.x

Dalam ASP.NET Core 2.x, tidak perlu membuat instantiate Startup dalam IConfiguration pembina kerana ia disuntik oleh sistem 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 memerlukan secara eksplisit memuatkan fail Startup dalam 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>

Mendapat nilaiappsettings.json daripada

Terdapat dua cara utama untuk mendapatkan nilai daripada appsettings.json:

Kaedah mudah

Suntikan keseluruhan konfigurasi ke dalam pengawal atau kelas melalui IConfiguration dan dapatkan nilai yang diingini menggunakan kekunci yang ditentukan:

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

Corak Pilihan

Untuk tetapan berbilang atau kompleks, mod Pilihan menggunakan kelas untuk mewakili hierarki konfigurasi:

  1. Tentukan kelas konfigurasi untuk mewakili struktur tetapan aplikasi. Contohnya:
<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. Daftar contoh konfigurasi dalam Startup daripada ConfigureServices:
<code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
  1. Suntikan IOptions<AppIdentitySettings> ke dalam pengawal/kelas yang menggunakannya:
<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>

Atas ialah kandungan terperinci Bagaimanakah Program Teras ASP.NET dan Kelas Permulaan Berevolusi Merentas Versi Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn