>백엔드 개발 >C++ >ASP.NET Core의 프로그램 및 시작 클래스는 여러 버전에 걸쳐 어떻게 발전했나요?

ASP.NET Core의 프로그램 및 시작 클래스는 여러 버전에 걸쳐 어떻게 발전했나요?

Linda Hamilton
Linda Hamilton원래의
2025-01-13 16:09:43571검색

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

ASP.NET Core의 ProgramStartup 클래스 진화

이 문서에서는 다양한 ASP.NET Core 버전에서 ProgramStartup 클래스의 발전을 살펴봅니다.

ASP.NET 코어 6.x

ASP.NET Core 6.x에서는 ProgramStartup 클래스가 크게 변경되었습니다.

  • 최상위 명령문을 사용할 때는 Program.Main() 템플릿 코드가 필요하지 않습니다.
  • 암시적 using 지시문.
  • Startup 클래스는 더 이상 필요하지 않으며 모든 코드는 Program 파일에 있습니다.
  • WebApplicationWebApplicationBuilder을 소개합니다.

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>

옵션 패턴

여러 가지 또는 복잡한 설정의 경우 옵션 모드는 클래스를 사용하여 구성 계층을 나타냅니다.

  1. 애플리케이션 설정의 구조를 나타내는 구성 클래스를 정의합니다. 예:
<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. StartupConfigureServices에 구성 인스턴스 등록:
<code class="language-csharp">var identitySettingsSection = _configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);</code>
  1. 이를 사용하는 컨트롤러/클래스에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.