2009-05-01 26 views
1

這是一個研究項目。我有三個數據庫類A,B,C。有一個工廠類通過它的構造函數接收哪個類創建的對象。三個類[A,B,C]中的每一個都有一個帶有參數的構造函數來提供數據庫連接對象。這是我在工廠類的createObject方法中使用的代碼:GetConstructor.invoke錯誤

Type classtyp = Type.GetType(className); 

Type[] constrParam = new Type[1]; 
constrParam[0] = typeof(DBConnection); 
ConstructorInfo constr = database.GetConstructor(constrParam); 

return constr.Invoke(constrParam) as Database; 

上面的最後一行給出了此錯誤。

對象類型的 'System.RuntimeType' 不能轉換爲類型 'System.Data.Common.DbConnection'。

怎麼了 'System.RuntimeType' 到這裏來?我試圖創建一個類A的對象,它具有一個構造函數,它接受一個DBconnection類型的變量。

當前我傳遞給工廠類指令來創建類A的實例。這類甲的代碼:

public class SqlServerDB: Database 
{ 
    string str = ""; 

    public SqlServerDB(DbConnection DBConn) 
     : base(DBConn) 
    { 
     str = "SQLServer"; 
    } 
} 

我在做什麼錯了?

謝謝。

回答

3

調用方法將需要傳入構造函數的對象。您正在傳入類型 DbConnection。你應該傳入的是DbConnection的一個實例。

更清楚一點,如果你直接創建這些對象之一,你會做這樣的事情:

DbConnection connection = GetConnection(); //some method that gives you back a connection object 
SqlServerDB db = new SqlServerDB(connection); 

你在做什麼,雖然是一樣的這樣做:

Type type = typeof(DbConnection); 
SqlServerDB db = new SqlServerDB(type); //This is obviously wrong.