ASP.NET Core의 Program
및 Startup
클래스 진화
이 문서에서는 다양한 ASP.NET Core 버전에서 Program
및 Startup
클래스의 발전을 살펴봅니다.
ASP.NET 코어 6.x
ASP.NET Core 6.x에서는 Program
및 Startup
클래스가 크게 변경되었습니다.
Program.Main()
템플릿 코드가 필요하지 않습니다. using
지시문. Startup
클래스는 더 이상 필요하지 않으며 모든 코드는 Program
파일에 있습니다. WebApplication
과 WebApplicationBuilder
을 소개합니다. ASP.NET Core 6.x용 Program.cs
파일의 예:
<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에는 작업자 서비스를 지원하는 일반 호스트 빌더가 도입되었습니다.
<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
클래스는 버전 2.x와 유사합니다.
ASP.NET 코어 2.x
ASP.NET Core 2.x에서는 DI 시스템에 의해 주입되므로 Startup
생성자에서 IConfiguration
을 인스턴스화할 필요가 없습니다.
<code class="language-csharp">public Startup(IConfiguration configuration, IHostingEnvironment env) { this.HostingEnvironment = env; this.Configuration = configuration; }</code>
ASP.NET 코어 1.x
ASP.NET Core 1.x에서는 Startup
: 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>
appsettings.json
에서
appsettings.json
에서 값을 가져오는 두 가지 주요 방법은 다음과 같습니다.
간단한 방법
IConfiguration
을 통해 전체 구성을 컨트롤러나 클래스에 삽입하고 지정된 키를 사용하여 원하는 값을 가져옵니다.
<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>
옵션 패턴
여러 가지 또는 복잡한 설정의 경우 옵션 모드는 클래스를 사용하여 구성 계층을 나타냅니다.
<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
의 ConfigureServices
에 구성 인스턴스 등록: <code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings"); services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
IOptions<AppIdentitySettings>
를 삽입합니다. <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>
위 내용은 ASP.NET Core의 프로그램 및 시작 클래스는 여러 버전에 걸쳐 어떻게 발전했나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!