Domanda

Questo è un progetto di studio. Ho tre classi di database A, B, C. Esiste una classe factory che riceve attraverso il suo costruttore quale oggetto della classe creare. Ognuna delle tre classi [A, B, C] ha un costruttore con un parametro per fornire l'oggetto di connessione al database. Questo è il codice che sto usando nel metodo createObject della classe factory:

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;

L'ultima riga sopra riporta questo errore.

" L'oggetto del tipo 'System.RuntimeType' non può essere convertito nel tipo 'System.Data.Common.DbConnection'. "

Come è arrivato il 'System.RuntimeType'? Sto cercando di creare un oggetto di classe A che ha un costruttore che accetta una variabile di tipo DBconnection.

Attualmente sto passando alle istruzioni della classe di fabbrica per creare solo un'istanza di classe A. Questo è il codice di classe A:

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

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

Cosa sto facendo di sbagliato?

Grazie.

È stato utile?

Soluzione

Il metodo Invoke prende gli oggetti che devi passare al costruttore. Stai passando nel tipo DbConnection. Quello che dovresti passare è un'istanza di DbConnection.

Per essere un po 'più chiari, se stessi creando direttamente uno di questi oggetti, faresti qualcosa del genere:

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

Quello che stai facendo è lo stesso di farlo:

Type type = typeof(DbConnection);
SqlServerDB db = new SqlServerDB(type); //This is obviously wrong.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top