C# GetConstructor.invoke错误

C# GetConstructor.invoke错误,c#,invoke,getconstructor,C#,Invoke,Getconstructor,这是一个研究项目。我有三个数据库类A、B、C。有一个工厂类通过其构造函数接收要创建的类的对象。三个类[A、B、C]中的每一个都有一个构造函数,该构造函数带有一个参数,用于提供数据库连接对象。这是我在factory类的createObject方法中使用的代码: Type classtyp = Type.GetType(className); Type[] constrParam = new Type[1]; constrParam[0] = typeof(DBConnection); Const

这是一个研究项目。我有三个数据库类A、B、C。有一个工厂类通过其构造函数接收要创建的类的对象。三个类[A、B、C]中的每一个都有一个构造函数,该构造函数带有一个参数,用于提供数据库连接对象。这是我在factory类的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 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.