Heim > Backend-Entwicklung > C++ > Wie haben sich die Programm- und Startklassen von ASP.NET Core in verschiedenen Versionen entwickelt?

Wie haben sich die Programm- und Startklassen von ASP.NET Core in verschiedenen Versionen entwickelt?

Linda Hamilton
Freigeben: 2025-01-13 16:09:43
Original
576 Leute haben es durchsucht

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

ASP.NET Cores Program und Startup Klassenentwicklung

In diesem Artikel wird die Entwicklung der Klassen Program und Startup in verschiedenen ASP.NET Core-Versionen untersucht.

ASP.NET Core 6.x

ASP.NET Core 6.x weist wesentliche Änderungen an den Klassen Program und Startup auf:

  • Bei Verwendung von Anweisungen der obersten Ebene ist kein Program.Main() Vorlagencode erforderlich.
  • Implizite using-Direktive.
  • Die Klasse Startup wird nicht mehr benötigt, der gesamte Code befindet sich in der Datei Program.
  • Führt WebApplication und WebApplicationBuilder ein.

Beispiel einer Program.cs-Datei für 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>
Nach dem Login kopieren

ASP.NET Core 3.x bis 5.x

ASP.NET Core 3.x führt einen generischen Host-Builder zur Unterstützung von Worker-Diensten ein:

<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>
Nach dem Login kopieren
Die Klasse

Startup ähnelt Version 2.x.

ASP.NET Core 2.x

In ASP.NET Core 2.x besteht keine Notwendigkeit, Startup im IConfiguration-Konstruktor zu instanziieren, da es vom DI-System eingefügt wird:

<code class="language-csharp">public Startup(IConfiguration configuration, IHostingEnvironment env)
{
    this.HostingEnvironment = env;
    this.Configuration = configuration;
}</code>
Nach dem Login kopieren

ASP.NET Core 1.x

ASP.NET Core 1.x erfordert das explizite Laden der Startup-Datei in 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>
Nach dem Login kopieren

Erhält Wertappsettings.json von

Es gibt zwei Hauptmethoden, um einen Wert von appsettings.json zu erhalten:

Einfache Methode

Injizieren Sie die gesamte Konfiguration über IConfiguration in einen Controller oder eine Klasse und erhalten Sie den gewünschten Wert mit dem angegebenen Schlüssel:

<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>
Nach dem Login kopieren

Optionsmuster

Für mehrere oder komplexe Einstellungen verwendet der Optionsmodus Klassen, um eine Hierarchie von Konfigurationen darzustellen:

  1. Definieren Sie Konfigurationsklassen, um die Struktur der Anwendungseinstellungen darzustellen. Zum Beispiel:
<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>
Nach dem Login kopieren
  1. Konfigurationsinstanz in Startup von ConfigureServices registrieren:
<code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
Nach dem Login kopieren
  1. Injizieren Sie IOptions<AppIdentitySettings> in den Controller/die Klasse, der/die es verwendet:
<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie haben sich die Programm- und Startklassen von ASP.NET Core in verschiedenen Versionen entwickelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage