Я хочу сопоставить DbConnection
с неоткрытым SqlConnection
, используя Ninject
. Вот что я сделал:
string constr = @"Server=.\SQLEXPRESS; Trusted_Connection=True; Database=TestDB";
Bind<DbConnection>().To<SqlConnection>()
.Using<OnePerRequestBehavior>()
.WithConstructorArgument("connectionString", constr);
Однако, при попытке использовать БД я получаю сообщение о том, что
Эта операция требует подключения к базе данных «master». Невозможно создать соединение с базой данных «master», поскольку исходное соединение с базой данных было открыто, а учетные данные были удалены из строки соединения. Поставьте неоткрытое соединение.
(та же операция работает, если я просто предоставляю соединение с new SqlConnection(constr)
...)
Оказывается свойство QueryString
SqlConnection
, которое мне дал Ninject, пусто . Что я делаю не так?
UPDATE
Я сейчас протестировал с kernel.Get<DbConnection>()
непосредственно после привязки, и с помощью приведенного выше кода он все еще дает мне пустую строку подключения. Следующие работы, хотя это более многословно, чем я хочу:
Bind<DbConnection>().ToMethod<SqlConnection>(ctx => GetConnection());
private SqlConnection GetConnection()
{ return new SqlConnection(constr); }
ОБНОВЛЕНИЕ 2
Это весь мой модуль:
public class MsSqlModule : StandardModule
{
private string constr = @"Server=AASLOEG\SQLEXPRESS; Trusted_Connection=True; Database=Booking_Test";// System.Configuration.ConfigurationManager.ConnectionStrings["mssql"].ConnectionString;
public override void Load()
{
Bind<DbConnection>().To<SqlConnection>().WithConstructorArgument("connectionString", constr);
var test = Kernel.Get<DbConnection>();
test.Dispose();
}
}
С точкой останова на var test = Kernel.Get<DbConnection>();
и переходом, я вижу, что test
заполнен SqlConnection
, но свойство ConnectionString
пусто.