Maison >développement back-end >C++ >Comment le programme et les classes de démarrage d'ASP.NET Core ont-ils évolué dans différentes versions ?
Évolution des classes Program
et Startup
d'ASP.NET Core
Cet article explore l'évolution des classes Program
et Startup
dans différentes versions d'ASP.NET Core.
ASP.NET Core 6.x
ASP.NET Core 6.x apporte des modifications majeures aux classes Program
et Startup
:
Program.Main()
code de modèle lors de l'utilisation d'instructions de niveau supérieur. using
implicite. Startup
n'est plus nécessaire, tout le code est dans le fichier Program
. WebApplication
et WebApplicationBuilder
. Exemple de Program.cs
fichier pour 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 Core 3.x à 5.x
ASP.NET Core 3.x introduit un générateur d'hôte générique pour prendre en charge les services de travail :
<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>La classe
Startup
est similaire à la version 2.x.
ASP.NET Core 2.x
Dans ASP.NET Core 2.x, il n'est pas nécessaire d'instancier Startup
dans le constructeur IConfiguration
car il est injecté par le système 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 nécessite de charger explicitement le fichier Startup
dans 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>
Obtient de la valeurappsettings.json
de
Il existe deux manières principales d'obtenir une valeur de appsettings.json
:
Méthode simple
Injectez l'intégralité de la configuration dans un contrôleur ou une classe via IConfiguration
et obtenez la valeur souhaitée à l'aide de la clé spécifiée :
<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>
Modèle d'options
Pour les paramètres multiples ou complexes, le mode Options utilise des classes pour représenter une hiérarchie de configurations :
<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
de ConfigureServices
: <code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings"); services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
IOptions<AppIdentitySettings>
dans le contrôleur/classe qui l'utilise : <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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!