2
TLDR:Ninjectバインディングで新しいSql Connectionオブジェクトを再利用またはインスタンス化するにはどうすればよいですか? **** SqlConnectionが初期化されていないため、2番目のバインディングが****に失敗しています。私は複数のバインディングを介してSQL接続を共有できないと思いますか?複数のninjectバインディングでSqlConnectionを再利用する
私はこのパターンでSQLのリポジトリを持っています。
public class SqlRepository<T> : DataConnection, IRepository<T> where T : new() {
public SqlRepository(IDbConnection connection) : base(connection)
}
DataConnection
はIDbConnection
を受け入れ、Connectionオブジェクトを返します。
public class DataConnection : IDisposable {
private IDbConnection _connection;
public DataConnection(IDbConnection connection) {
this._connection = connection;
}
protected IDbConnection Connection {
get {
if(_connection.state != ConnectionState.Open && _connection.state != ConnectionState.Connecting)
_connection.Open();
return _connection;
}
}
}
Iのいずれかで2つの場所でそれを再使用しています私のクラスは、どの型引数が渡されるかによって異なりますが、のSQL接続は同じです:
ここは私のバインディングです:
public class WidgetIocModule : Ninject.Modules.NinjectModule {
public override void Load() {
//get the sql connection
var sql = new SqlConnection(ConfigurationManager.ConnectionStrings["widgetsConn"].ToString());
//bind to repos
Bind<IRepository<Widget>>().To<SqlRepository<Widget>>().InSingletonScope().WithConstructorArgument("connection", sql);
Bind<IRepository<Credential>>().To<SqlRepository<Credential>>().InSingletonScope().WithConstructorArgument("connection", sql);
}
}
私は何が起こっているのかわからないんだけど、2番目のバインド時に、私は」エラー( '(System.Data.SqlClient.SqlConnection)_connection).ServerVersion'が 'System.InvalidOperationException'型の例外をスローしました。 – Kyle
linqクエリの中でdbを必要とする関数を呼び出すのは私と関係があります。 'InvalidOperationException'は、{ConnectionStringプロパティが初期化されていません。}}最初のいくつかの成功した呼び出しの後に}}。 – Kyle
Doh!これは正解です(受け入れられました)。もう一つの問題は私の 'using(){}'節に関連しています。 – Kyle