**
全新单例接口生成高度封装。
**
- 逆变和协变
- 统一使用的接口
- 高度封装实现类只关心自己做什么
- 接口定义方法为外界提供使用
- 非常好用 不用反射加载了
//统一接口
namespace Singleton
{
public interface IMangerBase<out M>{}
}
namespace Utility
{
internal class Singleton<T,M> where T class,M,new() where M:IManagerBase<M>
{
private static M _instance;
public static M Instance => Create();
private static M Create()
{
lock(typeof(uint))
{
if (_instance == null)
{
_instance = new T();
}
return typeof(M).IsAssignableFrom(_instance.GetType()) ? (M)(IManagerBase<M>)_instance : default(M);
}
}
}
}
namespace FrameWork.UI
{
public interface IUIManager : IManagerBase<IUIManager>
{
}
/// <summary>
/// UI管理器
/// </summary>
internal sealed class UIManager : ManagerSingleton<UIManager, IUIManager>, IUIManager
{
}
}
public static GameManagerEntry
{
public static IUIManager UIMgr => ManagerSingleton<UIManager, IUIManager>.MgrInstace;
}