λ·λ·μ μ±μ μ¬μλλ§μΌλ‘ μ±μ μ€μ μ λ³κ²½ν μ μλ Configuration APIλ₯Ό μ 곡ν©λλ€.
κΈ°λ³Έμ μΌλ‘ νκ²½ λ³μμ, βappsettings.jsonβ νμΌμ μΈμνκ²λ μ€μ λμ΄ μμ΅λλ€.
μμ€ν μ μλμ κ°μ΄ κ΄μ¬μ¬ λ³λ‘ λλλ€κ³ ν λ,
- WebApp
- Infra.Database
κ° κ΄μ¬μ¬λ₯Ό μ±
μμ§λ ν λ³λ‘ μ
무 λΆμ₯μ΄ μ΄λ€μ§ κ²μ
λλ€.
μλ₯Ό λ€λ©΄, WebApp μ μΉν, Infra.Database λ λ°μ΄ν°λ² μ΄μ€ ν μ²λΌ λ§μ΄μ£ .
μμ κ°μ΄ μ 무 λΆμ₯μ νμ§ μλλΌλ, κ° λͺ¨λμ κ΄ν μ€μ μ κ° λͺ¨λμ λλ κ², μ무λλ κ΄λ¦¬ ν¬μΈνΈκ° λͺ ννκ² λ©λλ€.
- WebApp
- appsettings.json- Infra.Database
- dbsettings.json
λͺ¨λ μ€μ νμΌμ μνΈλ¦¬ ν¬μΈνΈμΈ WebAppμ λΉλ κ²°κ³Όλ¬Όμ λ£¨νΈ ν΄λμ μ μ₯λ©λλ€.
\bin\release\.net8.0\appsettings.json
\bin\release\.net8.0\dbsettings.json
μ΄ κ²½μ°, νμ λͺ¨λμ μλ μ€μ μ΄ μλΉλλ λ°©μμ λ κ°μ§μ λλ€.
λ΄λΆ μλΉ
νμ λͺ¨λμ κ΄ν μ€μ μ΄κΈ° λλ¬Έμ, λ€λ₯Έ λͺ¨λμ μ΄ μ€μ μ λ ΈμΆν νμκ° μλ κ² μΌλ°μ μ΄λΌ ν μ μμ΅λλ€.
μ΄ κ²½μ°, dbsettings.json μμ μ€μ μ κ°μ Έ μ€λ 건 μμ μΈλ‘ μ½μ΅λλ€.
using Microsoft.Extensions.Configuration; // ν¨ν€μ§ νμ.
//...
var localConfiguraiton = new Configuration()
.AddJsonFile("dbsettings.json")
.Build();
var subSectionValue = localConfiguraiton.GetRequiredSection("{TopSection}:{SubSection}")?.Value;
// subSectionValue μλΉ μ½λ.
μ£Όμν μ μ, new Configuration() λ λ°λμ νμ λͺ¨λμμ μ€νλμ΄μΌ κ·Έ λͺ¨λμμ νμΌμ μ°Ύμ΅λλ€.
μΈλΆ 곡κ°
μΈλΆ 곡κ°νλ λ°©λ²μ μ΄λκ° κ°μ λ ΈμΆνμ¬, μ΄ λͺ¨λμ μ°Έμ‘°νλ λ€λ₯Έ λͺ¨λμμ μ½μ΄ κ°κ² λ§λ€λ©΄ λ©λλ€.
namespace Infra.Database
public static class DbSettings
{
public static string? Value { get; internal set; }
}
// μ€μ
var localConfiguraiton = new Configuration()
.AddJsonFile("dbsettings.json")
.Build();
DbSettings.Value = localConfiguraiton.GetRequiredSection("{TopSection}:{SubSection}")?.Value;
κ·Έλ°λ°, μ΄ λ°©λ²μ λ¬Έμ λ DbSettings.Value μ μ κ·Όνλ μμ μ λ°λΌ, μ€μ κ°μ λ°μ μλ μκ³ λ°μ§ λͺ»ν μλ μλ€(μ€μ νλ μ½λλ³΄λ€ μ κ·Όνλ μ½λκ° λ¨Όμ μ€νλλ κ²½μ°)λ μ μ λλ€.
κ·Έλ λ€κ³ μλμ κ°μ΄ μ²λ¦¬νλ©΄, νμΌμ μ κ·Ό μ½λκ° νμ μ€νλκΈ° λλ¬Έμ, μ±λ₯ λ¬Έμ κ° λ°μν©λλ€.
(κ·Έλ¬λ, μ μμ±μ μ’μ μ§λλ€.)
namespace Infra.Database
public static class DbSettings
{
private static IConfigurationRoot Config = new Configuration()
.AddJsonFile("dbsettings.json")
.Build();
public static string? Value => Config
.GetSection("{TopSection}:{SubSection}").Value
}
Dependency Injection
μ€μ μ κ°μ²΄λ‘ μΊ‘μνν΄μ, 컨ν μ΄ν°μ λ±λ‘νλ©΄, μ± μ€ν μ΄κΈ°μ λ±λ‘λκΈ° λλ¬Έμ, μ±λ₯ λ¬Έμ λ μ κ·Ό μμ°¨ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
μΊ‘μν
namespace Infra.Database.Contracts;
public class TopSection
{
public string? SubSection { get; set; }
}
μλΉμ€ λ±λ‘
μμ λͺ¨λμ DIμ μ€μ κ°μ²΄λ₯Ό Singleton μΌλ‘ λ±λ‘ν©λλ€.
using Microsoft.Extensions.Configuration; // ν¨ν€μ§ νμ
using Microsoft.Extensions.DependencyInjection; // ν¨ν€μ§ νμ
using Infra.Database.Contracts;
namespace Infra.Database;
public static class IServiceCollectonExtensions
{
public static IServiceCollection AddInfraDatabaseServices(this IServiceCollection services)
{
var localConfiguraiton = new Configuration()
.AddJsonFile("dbsettings.json")
.Build();
var topSection = new TopSection
{
SubSection = localConfiguraiton.GetRequiredSection("{TopSection}:SubSection}")?.Value,
}
service.AddSingleton(sp => topSection);
// μΆκ° λ±λ‘
return services;
}
}
μμ λͺ¨λ
// program.cs
using Infra.Database;
// ...
builder.Services.AddInfraDatabaseServices();
// ...
// minimal api
app.MapGet("/my-page", (TopSection dbSetttings) => {
// ...
});
@*MyPage.razor*@
@inject TopSection DbSettings
@*
....
*@