Startup 클래스는 앱의 서비스와 요청 파이프라인을 구성한다.
Startup Class
ASP.NET Core 앱은 관례상 Startup 이라고 불리는 Startup 클래스를 사용하며 이 이름은 Program.cs 에서 WebHostBuilderExtensions.UseStartup 메서드를 호출할 때 이름을 다르게 지정할 수 있다.
Startup 클래스는 기본적으로 아래의 두 메서드를 가진다.
- Startup Constructor : 생성자로 선택적으로 사용된다.
- ConfigureServices Method : 앱에서 사용할 services를 등록하는 메서드로 선택적으로 사용한다.
- Configure Method : 앱의 요청을 처리하는 파이프라인을 생성하는 메서드로 필수적이다.
ConfigureServices와 Configure 메서드는 앱이 시작될 때 ASP.NET Core runtime에 의해 호출되는데
ConfigureServices 메서드를 사용할 경우 Configure 메서드보다 먼저 호출된다.
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyAppContext>(option =>
{
option.UseSqlServer(_config.GetConnectionString("MyAppConnection"));
});
//services.AddTransient<DbSeeder>();
//services.AddScoped<IMemberRepository, MemberRepository>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello, World!");
});
});
}
}
Startup 클래스는 앱의 호스트가 빌드될때 호스트 빌더에서
WebHostBuilderExtensions.UseStartup <Tstartup> 메서드를 호출하여 Startup 클래스를 지정한다.
위에서 언급한 것처럼 Tstartup에 Startup 클래스가 될 클래스의 이름이 들어간다.
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>();
});
}
Startup Constructor
호스트는 Startup 클래스의 생성자에 services를 넘겨주는데 Generic Host를 사용할 경우
Startup 클래스의 생성자는 아래의 세 가지 타입의 서비스를 선택적으로 받을 수 있다.
- IWebHostEnvironment
- IHostEnvironment
- IConfiguration
public class Startup
{
public IConfiguration Configuration { get; }
public IHostEnvironment HostEnvironment { get; }
public IWebHostEnvironment WebHostEnvironment { get; }
public Startup(IConfiguration configuration,
IHostEnvironment hostEnvironment,
IWebHostEnvironment webHostEnvironment)
{
Configuration = configuration;
HostEnvironment = hostEnvironment;
WebHostEnvironment = webHostEnvironment;
}
}
추가적인 서비스는 ConfigureServices 메서드를 통해 추가할 수 있으며
호스트와 앱의 Services는 Configure 메서드와 앱 전체에서 사용할 수 있다.
ConfigureServices Method
ConfigureServices 메서드는 Configure 메서드가 호출되기 전에
호스트에 의해 호출되어 앱에서 사용할 서비스들을 서비스 컨테이너에 등록한다.
이곳에서 configuration options 가 규칙에 의해 설정되며, 실질적인 설정이 필요한 기능의 경우
IServiceCollections에 있는Add [서비스명] 사용할 수 있다.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyAppContext>(option =>
{
option.UseSqlServer(_config.GetConnectionString("MyAppConnection"));
});
//services.AddTransient<DbSeeder>();
//services.AddScoped<IMemberRepository, MemberRepository>();
}
}
서비스 컨테이너에 서비스를 등록하면 앱 전체와 Configure 메서드에서 사용할 수 있으며,
서비스는 Dependency Injection (DI) 또는 ApplicationServices를 통해 해결된다.
Configure Method
Configure 메서드는 앱이 HTTP 요청에 대해 응답하는 방식을 지정한다.
요청 파이프라인은 미들웨어 컴포넌트를 IApplicationBuilder 인스턴스에 추가하여 구성된다.
IApplicationBuilder는 Configure 메서드에서 사용할 수 있지만 호스트가 IApplicationBuilder를 생성하고
Configure 메서드에 직접 넘겨주기 때문에 서비스 컨테이너에는 등록되지 않는다.
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello, World!");
});
});
}
}
각 Use 확장 메서드는 요청 파이프라인에 하나이상의 미들웨어 컴포넌트를 추가한다.
예를 들어, UseStaticFiles 메서드는 요청 파이프라인에서 정적 파일을 제공하는 미들웨어를 사용할 수 있도록 한다.
'프로그래밍 > .NET' 카테고리의 다른 글
람다 (Lambda) (0) | 2020.12.11 |
---|---|
델리게이트 (Delegate) (0) | 2020.12.11 |
메서드 (Method) (0) | 2020.12.10 |
프로젝트에 관리자 권한 부여하기 (0) | 2020.07.24 |
웹에서 실행파일 실행시키기 ( Custom Url Schemes ) (0) | 2020.07.24 |