Question

Ceci est un projet d'étude. J'ai trois classes de base de données A, B, C. Il existe une classe fabrique qui reçoit par son constructeur l'objet de la classe à créer. Chacune des trois classes [A, B, C] possède un constructeur avec un paramètre pour fournir l'objet de connexion à la base de données. C’est le code que j’utilise dans la méthode createObject de la classe fabrique:

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;

La dernière ligne ci-dessus indique cette erreur.

& L'objet de type 'System.RuntimeType' ne peut pas être converti en type 'System.Data.Common.DbConnection'. & <;>

Comment le 'System.RuntimeType' est-il arrivé ici? J'essaie de créer un objet de classe A dont le constructeur prend une variable de type DBconnection.

Actuellement, je passe aux instructions de la classe fabrique pour créer une instance de la classe A uniquement. Ce code de classe A:

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

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

Qu'est-ce que je fais mal?

Merci.

Était-ce utile?

La solution

La méthode Invoke prend les objet (s) que vous devez passer dans le constructeur. Vous passez dans le type DbConnection. Ce que vous devriez transmettre est une instance de DbConnection.

Pour être un peu plus clair, si vous créiez directement l'un de ces objets, vous feriez quelque chose comme ceci:

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

Ce que vous faites cependant est la même chose que faire ceci:

Type type = typeof(DbConnection);
SqlServerDB db = new SqlServerDB(type); //This is obviously wrong.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top