Frage

Dies ist ein Studienprojekt. Ich habe drei Datenbank-Klassen A, B, C. Es ist eine Fabrik-Klasse, die durch den Konstruktor erhält die Klasse des Objekts zu erstellen. Jede der drei Klassen [A, B, C] hat einen Konstruktor mit einem Parameter, der das Datenbankverbindungsobjekt zu liefern. Dies ist der Code, den ich in der Fabrik Klasse create Methode:

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;

Die letzte Zeile oben gibt diesen Fehler.

" Objekt des Typs 'System.RuntimeType' kann nicht auf den Typ 'System.Data.Common.DbConnection' umgewandelt werden. "

Wie hat sich die ‚System.RuntimeType‘ hier? Ich versuche, ein Objekt der Klasse A zu schaffen, die einen Konstruktor hat, der eine Variable vom Typ DbConnection nimmt.

Zur Zeit bin ich vorbei auf die Werksklassen Anweisungen nur eine Instanz der Klasse A zu erstellen. Dies ist der Code der Klasse A:

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

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

Was mache ich falsch?

Danke.

War es hilfreich?

Lösung

Die Invoke-Methode nimmt das Objekt (e) , die Sie in den Konstruktor übergeben müssen. Sie vorbei in dem Typ DbConnection. Was sollten Sie sein, vorbei, ist eine Instanz DbConnection.

ein bisschen mehr klar sein, wenn Sie direkt eine dieser Objekte erstellt wurden, können Sie so etwas tun würde:

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

Was Sie tun, ist jedoch das gleiche wie dies zu tun:

Type type = typeof(DbConnection);
SqlServerDB db = new SqlServerDB(type); //This is obviously wrong.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top