TLDR: Как повторно использовать или создать экземпляр нового объекта Sql Connection в моих привязках Ninject? **** Второе связывание терпит неудачу **** из-за того, что SqlConnection не инициализируется. Я предполагаю, что не могу разделить соединение sql через несколько привязок?Повторное использование SqlConnection в нескольких привязках к ninject
У меня есть 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;
}
}
}
Я повторно использовать его в двух местах в одном из мои классы, в зависимости от того, какой аргумент типа передан, но соединение такое же:
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
Возможно, это связано с тем, что я вызываю функции, требующие db внутри запроса linq. 'InvalidOperationException' говорит {" Свойство ConnectionString не было инициализировано. "} После первых нескольких успешных вызовов. – Kyle
Doh! Это правильный ответ (принято). Другая проблема связана с моими использованиями (use {) {} 'для размещения и закрытия соединений. – Kyle