2
TLDR:如何在我的Ninject綁定中重新使用或實例化新的Sql Connection對象? ****由於SqlConnection未初始化,第二個綁定失敗****。我假設我不能跨多個綁定共享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;
}
}
}
我重新使用它在兩個地方中的一個我的類,這取決於通過什麼類型的參數,但sql連接是相同的:
public class WidgetsProvider {
private readonly IRepository<Widget> _widgetsRepo;
private readonly IRepository<Credential> _credentialRepo;
public WidgetsProvider(IRepository<Widget> widgetsRepo, IRepository<Credential> credentialRepo) {
_widgetsRepo = widgetsRepo;
_credentialRepo = credentialRepo;
}
}
這裏是我的綁定:
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);
}
}
我不知道這是怎麼回事,但第二個綁定過程中,我m得到一個錯誤'((System.Data.SqlClient.SqlConnection)_connection).ServerVersion'拋出了一個'System.InvalidOperationException'類型的異常。 – Kyle
它可能與我需要在linq查詢中調用需要db的函數有關。在最初的幾次成功調用後,InvalidOperationException說{「ConnectionString屬性尚未初始化」}。 – Kyle
Doh!這是正確的答案(接受)。另一個問題與我的'using(){}'子句處理和關閉連接有關。 – Kyle