.NET MAUI - Configuration 을 이용한 json 파일 제어

2022. 8. 30. 00:00MAUI

반응형

MAUI 를 사용하다 보면 json 파일을 이용하여 config 을 구성하고 싶을 때가 있다. 

가장 좋은 방법은 .NET 에서 기본적으로 지원해 주는 IConfiguration 을 이용하는 방법이다. 

MAUI 에서 Configuration 을 사용하는 방법을 알아보자.

 

MAUI 에서 시작 Project 를 선택하고 다음 두가지 package 를 설치 하자

  • Microsoft.Extensions.Configuration.Binder
  • Microsoft.Extensions.Configuration.Json

 

설치가 완료되었다면 MauiProgram.cs 로 이동하자.

그리고 아래 코드를 입력하자.

using Microsoft.Extensions.Configuration;
...
using var stream = Assembly.GetExecutingAssembly()
                           .GetManifestResourceStream("YourAppName.appsettings.json");
var config = new ConfigurationBuilder().AddJsonStream(stream).Build();
builder.Configuration.AddConfiguration(config);

 

Project 에 appsettings.json 을 추가하자

 

ctrl + shift + A  --> appsettings.json 추가

 

appsettings.json --> 속성 --> 아래와 같이 설정

appsettings.json

{
  "Settings": {
    "KeyOne": 1,
    "KeyTwo": true,
    "KeyThree": {
      "Message": "하하하 이거 대박이야!!"
    }
  }
}

 

Configuration/MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp1.Configuration.MainPage"
             xmlns:local="clr-namespace:MauiApp1.Configuration"
             Title="Main Page">
    <VerticalStackLayout Padding="10" Spacing="20">
        <Label 
            Text="{Binding Name}" 
            VerticalOptions="Center"
            HorizontalOptions="Center"
            FontSize="24"/>

        <Button Command="{Binding ChangeNameCommand}" Text="Change Name" />
    </VerticalStackLayout>
</ContentPage>

Configuration/MainPage.xaml.cs

using MauiApp1.InjectableServices;

namespace MauiApp1.Configuration;

public partial class MainPage : ContentPage, ITransientService
{
	public MainPage(MainViewModel mainViewModel)
	{
		InitializeComponent();
		BindingContext = mainViewModel;
    }
}

Configuration/MainViewModel.cs

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MauiApp1.InjectableServices;
using Microsoft.Extensions.Configuration;

namespace MauiApp1.Configuration;
public partial class MainViewModel : ObservableObject, ITransientService
{
    private readonly IConfiguration _configuration;
    public MainViewModel(IConfiguration configuration)
    {
        Name = "My Name is Yogingang";
        _configuration = configuration;
    }

    [ObservableProperty]
    private string name;


    [RelayCommand]
    private void ChangeName() => Name = DateTime.UtcNow + " " + 
                                _configuration
                                .GetSection("Settings")
                                .GetSection("KeyThree")
                                .GetValue<string>("Message");
}

IConfiguration 을 Injection 하여 ChangeNameCommand 가 trigger 되면 utcNow 와 함께 Message 를 가져온다.

 

실행

 

 

 

관련영상

https://youtu.be/zXX-RBLBdZY

 

반응형