using EasyInject.Attributes;
using EasyInject.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
[DefaultExecutionOrder(-1000000000)]
[GameObjectBean]
[AddComponentMenu("WXDC/Application/ApplicationBoot")]
public sealed class ApplicationBoot : MonoBehaviour
{
public static readonly IIoC Instance = new MyIoC();
[Autowired]
private ApplicationStateMachine applicationState;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void OnBeforeSceneLoad()
{
Debug.Log("First scene loading: Before Awake is called.");
}
private void Awake()
{
Debug.Log("IOC容器初始化");
Instance.Init();
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
private static void Run()
{
//Debug.Log("IOC容器初始化");
//Instance.Init();
}
private void Start()
{
applicationState.OnInit();
}
private void Update()
{
applicationState.OnUpdate();
}
private void OnDestroy()
{
// Clear the Beans in the corresponding scene
Shutdown();
Instance.ClearBeans(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
}
///
/// 应用关闭执行
///
private void Shutdown()
{
List shutdowns = Instance.GetBeans();
shutdowns = shutdowns.Distinct().ToList();
foreach(var down in shutdowns)
{
if (down == null)
{
continue;
}
try
{
down?.Shutdown();
}
catch (Exception ex)
{
Debug.LogError(ex);
}
}
}
}