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:
Program.Main()
Vorlagencode erforderlich. using
-Direktive. Startup
wird nicht mehr benötigt, der gesamte Code befindet sich in der Datei Program
. 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>
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>
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>
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>
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>
Optionsmuster
Für mehrere oder komplexe Einstellungen verwendet der Optionsmodus Klassen, um eine Hierarchie von Konfigurationen darzustellen:
<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
von ConfigureServices
registrieren: <code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings"); services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
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>
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!