View Code
public static class SingletonProvider<T> where T : new()
{
private static T m_instance;
private static readonly object sync = new object();
/// <summary>
/// 不够构造函数的泛型单列
/// </summary>
public static T Instance
{
get
{
if (m_instance == null)
{
lock (sync)
{
if (m_instance == null)
{
try
{
m_instance = new T();
}
catch
{
}
}
}
}
return m_instance;
}
}
/// <summary>
/// 带构造函数的泛型单列模式
/// </summary>
public static T InstanceForParameter(params object[] objarr)
{
if (m_instance == null)
{
lock (sync)
{
if (m_instance == null)
{
var t = typeof(T);
var tp = new Type[objarr.Length];
for (int i = 0; i < objarr.Length; i++)
{
tp[i] = objarr[i].GetType();
}
try
{
System.Reflection.ConstructorInfo ci = t.GetConstructor(tp);
m_instance = (T)ci.Invoke(objarr);
}
catch
{
}
}
}
}
return m_instance;
}
}
{
private static T m_instance;
private static readonly object sync = new object();
/// <summary>
/// 不够构造函数的泛型单列
/// </summary>
public static T Instance
{
get
{
if (m_instance == null)
{
lock (sync)
{
if (m_instance == null)
{
try
{
m_instance = new T();
}
catch
{
}
}
}
}
return m_instance;
}
}
/// <summary>
/// 带构造函数的泛型单列模式
/// </summary>
public static T InstanceForParameter(params object[] objarr)
{
if (m_instance == null)
{
lock (sync)
{
if (m_instance == null)
{
var t = typeof(T);
var tp = new Type[objarr.Length];
for (int i = 0; i < objarr.Length; i++)
{
tp[i] = objarr[i].GetType();
}
try
{
System.Reflection.ConstructorInfo ci = t.GetConstructor(tp);
m_instance = (T)ci.Invoke(objarr);
}
catch
{
}
}
}
}
return m_instance;
}
}