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
Libérer: 2025-01-13 16:09:43
original
624 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion
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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion
  1. Enregistrer l'instance de configuration dans Startup de ConfigureServices :
<code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
Copier après la connexion
  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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal