mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
37 lines
1.0 KiB
C#
37 lines
1.0 KiB
C#
using System.Threading.Tasks;
|
|
#pragma warning disable CS8601
|
|
#pragma warning disable CS8618
|
|
|
|
namespace TEngine.Core
|
|
{
|
|
public abstract class Singleton<T> : ISingleton where T : ISingleton, new()
|
|
{
|
|
public bool IsDisposed { get; set; }
|
|
|
|
public static T Instance { get; private set; }
|
|
|
|
private void RegisterSingleton(ISingleton singleton)
|
|
{
|
|
Instance = (T) singleton;
|
|
AssemblyManager.OnLoadAssemblyEvent += OnLoad;
|
|
AssemblyManager.OnUnLoadAssemblyEvent += OnUnLoad;
|
|
}
|
|
|
|
public virtual Task Initialize()
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
protected virtual void OnLoad(int assemblyName) { }
|
|
|
|
protected virtual void OnUnLoad(int assemblyName) { }
|
|
|
|
public virtual void Dispose()
|
|
{
|
|
IsDisposed = true;
|
|
Instance = default;
|
|
AssemblyManager.OnLoadAssemblyEvent -= OnLoad;
|
|
AssemblyManager.OnUnLoadAssemblyEvent -= OnUnLoad;
|
|
}
|
|
}
|
|
} |