2010-01-10 127 views
3

我想使用System.Activator.CreatInstance創建一個基於typeName的對象。我使用下面的代碼:問題與System.Activator.CreateInstance

Object DataInstance = System.Activator.CreateInstance(
         System.Reflection.Assembly.GetExecutingAssembly().FullName, 
         "CMS.DataAccess.SQLWebSite"); 
IWebSite NewWebPage = (IWebSite)DataInstance; 

SQLWebSite實現IWebSite。但是,出現以下錯誤:「無法投射'System.Runtime.Remoting.ObjectHandle'類型的對象來鍵入'CMS.DataAccess.IWebSite'。」任何想法我哪裏錯了?

回答

13

嘗試unwrap調用CreateInstance之後,即:

Object DataInstance = System.Activator.CreateInstance(System.Reflection.Assembly.GetExecutingAssembly().FullName, 
            "CMS.DataAccess.SQLWebSite").Unwrap(); 
      IWebSite NewWebPage = (IWebSite)DataInstance; 
3

如果你真的想使用的類型名稱,而不是強類型的方法的版本,那麼你可以這樣做:


var instance = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("CMS.DataAccess.SQLWebSite"); 

你可以只使用:


System.Activator.CreateInstance(typeof(SQLWebSite)) 

但MABE你想不必須在代碼中引用實現。