using System;
using System.Threading.Tasks;
using TinaX.Container;
using TinaX.Services;
using UnityEngine;
namespace TinaX
{
public interface IXCore
{
#region Infos
GameObject BaseGameObject { get; }
string LocalStoragePath_TinaX { get; }
string LocalStoragePath_App { get; }
string FrameworkVersionName { get; }
bool IsRunning { get; }
string ProfileName { get; }
bool DevelopMode { get; }
#endregion
IServiceContainer Services { get; }
ICommandLineArgs CommandLineArgs { get; }
///
/// Register a "TinaX Service Provider".
/// 注册 TinaX 服务提供者
///
///
///
IXCore RegisterServiceProvider(IXServiceProvider provider);
#region Dependency Injection | 依赖注入
///
///Get Service | 获取服务
///
///
///
///
TService GetService(params object[] userParams);
///
/// Get Service | 获取服务
///
///
///
///
object GetService(Type type, params object[] userParams);
bool TryGetService(out TService service, params object[] userParams);
bool TryGetService(Type type, out object service, params object[] userParams);
///
/// Bind Service. | 绑定服务
///
/// 服务接口
///
void BindService();
///
/// Bind a global singleton Service. | 绑定全局单例服务。
///
///
///
void BindSingletonService();
bool TryGetBuiltinService(out TBuiltInInterface service) where TBuiltInInterface : IBuiltInService;
IXCore ConfigureServices(Action options);
void InjectObject(object obj);
#endregion
#region Exceptions | 异常处理
IXCore OnServicesInitException(Action callback);
IXCore OnServicesStartException(Action callback);
#endregion
#region Domain
object CreateInstance(Type type, params object[] args);
#endregion
Task RunAsync();
void RunAsync(Action finishCallback);
Task CloseAsync();
object CreateInstanceAndInject(Type type);
}
}