Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Program Teras ASP.NET dan Kelas Permulaan Berevolusi Merentas Versi Berbeza?
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
:
Program.Main()
kod templat apabila menggunakan pernyataan peringkat teratas. using
Tersirat. Startup
tidak diperlukan lagi, semua kod ada dalam fail Program
. 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:
<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
daripada ConfigureServices
: <code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings"); services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
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!