GetConstructor.invokeエラー
-
03-07-2019 - |
質問
これは研究プロジェクトです。 3つのデータベースクラスA、B、Cがあります。作成するクラスのオブジェクトをコンストラクターから受け取るファクトリクラスがあります。 3つのクラス[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」はどのようにしてここに来たのですか? DBconnection型の変数を取るコンストラクターを持つクラスAのオブジェクトを作成しようとしています。
現在、クラスAのインスタンスのみを作成するために、ファクトリクラスの指示に渡しています。クラスAのコード:
public class SqlServerDB: Database
{
string str = "";
public SqlServerDB(DbConnection DBConn)
: base(DBConn)
{
str = "SQLServer";
}
}
間違っているのは何ですか?
ありがとう。
解決
Invokeメソッドは、コンストラクターに渡す必要があるオブジェクトを受け取ります。 type 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