GetSerction(), ConnectionStrings()…이 값을 찾지 못한다면, appsetting.json에서 {}위치가 맞는지 확인 할 것…(”ConnectionStrings”이 “Logging”안에 있다던가…)
대부분의 설정파일(appSetting.json 등) 및 환경변수에는 서버의 정보, DB의 로그인 정보, 시크릿 키 등 중요한 정보를 담는다. 이러한 값들은 서버마다 설정 값이 다를 수 있고, 무엇보다 보안과 직결되므로 깃허브 등에 올리지 않고 로컬에서 저장하여 관리한다.
대표적인 예로는 db의 connection string이 있다.
[appSetting.json]
{
... ,
"ConnectionStrings": {
"Mysql_Users": "Host=localhost;Port=3306;User=gyeon;Password=1q2w3e4r;Database=account_db;SslMode=Required"
},
...
}
[program.cs, 설정값 사용 부분]
builder.Services.AddTransient<QueryFactory>((e) =>
{
var connection = new MySqlConnection(
**builder.Configuration.GetConnectionString("Mysql_Users")**
);
var compiler = new MySqlCompiler();
return new QueryFactory(connection, compiler);
});
컨트롤러-서비스에서 설정 값 사용하는 방법 .Net core가 알아서 appsettings.json를 읽고 DI Container에 넣어준다. 서비스/컨트롤러에서 이를 DI하여 사용한다
public RedisActiveUserService(IConfiguration configuration)
{
_connectionString = **configuration**.GetSection("ConnectionStrings")["ActiveDB"];
...
}
program.cs에서 설정 값 사용하는 방법
builder
및 app
의 configuration프로퍼티에 접근하여 전용 메서드로 값을 가져온다. 각각의 configuration프로퍼티의 타입은 ConfigurationManager, IConfiguration로 다르지만, 제공하는 메서드를 사용하는 방법은 비슷한 듯 하다.
string connectionStriong = builder.**Configuration**.GetSection("ConnectionStrings")["ActiveDB"];
//특정 객체에 담아서 가져오고 싶을 때
TestObj testObj = builder.Configuration.GetSection("test").Get<TestObj>();
appsettings.json이외에 다른 파일의 설정을 가져오고 싶을 때
var configuration = new ConfigurationBuilder()
.AddJsonFile("file.json", optional: true, reloadOnChange: true)
.Build();
builder.Services.AddSingleton(configuration);
ConfigurationBuilder()
이 생성하는 ConfigurationBuilder객체에AddJsonFile()
로 json파일을 가져오고Build()
로 객체를 빌드하면 DI Container에 등록되어환경변수를 program.cs에서 DI Container에 등록 후, program.cs나 컨트롤러/서비스에서 사용.
환경변수를 DI컨테이너에 등록한다
var builder = WebApplication.CreateBuilder(args);
var configuration = new ConfigurationBuilder()
.**AddEnvironmentVariables()**
.Build();
builder.Services.AddSingleton(configuration);
서비스에서 환경변수 사용하는 방법
public RedisActiveUserService(IConfiguration configuration)
{
_configs = configuration; //DI 그냥 Env값 바로 받아도 됨 당연히.
...
}
void testFucn()
{
string? env = _configs["PATH"]; //이때, env는 nullable
}
program.cs에서 환경변수 사용하는 방법
string? env = builder.Configuration["PATH"]; //이때, env는 nullable