Files
EnglewoodLAB/Assets/Scripts/Studio/StudioAppContext.cs

54 lines
1.9 KiB
C#

#nullable enable
using UnityEngine;
using UVC.Core;
using UVC.UI.Menu;
using UVC.Util;
using UVC.Studio.Config;
using Cysharp.Threading.Tasks;
namespace UVC.Studio
{
public class StudioAppContext : InjectorAppContext
{
/// <summary>
/// App 라이프사이클 서비스들을 동기적으로 등록합니다.
/// </summary>
/// <remarks>
/// <para>비동기 로드가 필요 없는 서비스들만 여기서 등록합니다.</para>
/// <para>비동기 로드가 필요한 서비스는 RegisterServicesAsync()에서 등록하세요.</para>
/// </remarks>
protected override void RegisterServices()
{
base.RegisterServices();
// 비동기 로드가 필요 없는 싱글톤 서비스 등록
Injector.RegisterSingleton<StudioAppMain>();
Injector.RegisterSingleton<CursorManager>();
}
/// <summary>
/// App 라이프사이클 서비스들을 비동기적으로 등록합니다.
/// </summary>
/// <returns>비동기 등록 완료 UniTask</returns>
/// <remarks>
/// <para>이 메서드는 RegisterServices() 완료 후 await되어 호출됩니다.</para>
/// <para>완료될 때까지 IsInitialized가 false로 유지되므로 안전하게 비동기 로드를 수행할 수 있습니다.</para>
/// </remarks>
protected override async UniTask RegisterServicesAsync()
{
await base.RegisterServicesAsync();
// Setting과 Library를 병렬로 로드
var setting = new Setting();
var library = new Library();
await UniTask.WhenAll(
setting.LoadAsync(),
library.LoadAllParallelAsync()
);
// 로드 완료 후 인스턴스 등록
Injector.RegisterInstance<Setting>(setting);
Injector.RegisterInstance<Library>(library);
}
}
}