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;
        }
    }

 

posted on 2010-07-05 09:11  wsenmin  阅读(349)  评论(0编辑  收藏  举报