namespace Admin.NET.Core;
///
/// 单例泛型类
///
///
public abstract class Singleton where T : class
{
private static readonly Lazy _instance
= new Lazy(() =>
{
var ctors = typeof(T).GetConstructors(
BindingFlags.Instance
| BindingFlags.NonPublic
| BindingFlags.Public);
if (ctors.Count() != 1)
throw new InvalidOperationException($"Type {typeof(T)} must have exactly one constructor.");
var ctor = ctors.SingleOrDefault(c => !c.GetParameters().Any() && c.IsPrivate);
if (ctor == null)
throw new InvalidOperationException(
$"The constructor for {typeof(T)} must be private and take no parameters.");
return (T)ctor.Invoke(null);
});
public static T Instance => _instance.Value;
}