GetConstructor.invoke错误
-
03-07-2019 - |
题
这是一个研究项目。我有三个数据库类A,B,C。有一个工厂类通过其构造函数接收要创建的类的对象。三个类[A,B,C]中的每一个都有一个构造函数,其中包含一个用于提供数据库连接对象的参数。这是我在工厂类的createObject方法中使用的代码:
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类实例。这是A类的代码:
public class SqlServerDB: Database
{
string str = "";
public SqlServerDB(DbConnection DBConn)
: base(DBConn)
{
str = "SQLServer";
}
}
我做错了什么?
感谢。
解决方案
Invoke方法采用您需要传递给构造函数的对象。您正在传递类型 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.
不隶属于 StackOverflow