我想映射DbConnection
到未打开的SqlConnection
使用Ninject
. 这就是我所做的:
string constr = @"Server=.\SQLEXPRESS; Trusted_Connection=True; Database=TestDB";
Bind<DbConnection>().To<SqlConnection>()
.Using<OnePerRequestBehavior>()
.WithConstructorArgument("connectionString", constr);
但是,当尝试使用数据库时,我收到一条错误消息
此操作需要连接到“主”数据库。无法创建到“主”数据库的连接,因为原始数据库连接已打开并且凭据已从连接字符串中删除。提供一个未打开的连接。
(如果我只提供与new SqlConnection(constr)
...的连接,同样的操作也有效)
原来Ninject 给出的 I的QueryString
属性SqlConnection
是空的。我究竟做错了什么?
更新
我现在已经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
属性是空的。