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 ?

Comment le programme et les classes de démarrage d'ASP.NET Core ont-ils évolué dans différentes versions ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-13 16:09:43620parcourir

How Have ASP.NET Core's Program and Startup Classes Evolved Across Different 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 :

  • Pas besoin de Program.Main() code de modèle lors de l'utilisation d'instructions de niveau supérieur.
  • Directive using implicite.
  • La classe Startup n'est plus nécessaire, tout le code est dans le fichier Program.
  • Présente 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 :

  1. Définissez des classes de configuration pour représenter la structure des paramètres de l'application. Par exemple :
<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. Enregistrer l'instance de configuration dans Startup de ConfigureServices :
<code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
  1. Injecter 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn