我想使用Ninject
將DbConnection
映射到未打開的SqlConnection
。這是我做了什麼:Ninject:請求DbConnection時提供未打開的SqlConnection
string constr = @"Server=.\SQLEXPRESS; Trusted_Connection=True; Database=TestDB";
Bind<DbConnection>().To<SqlConnection>()
.Using<OnePerRequestBehavior>()
.WithConstructorArgument("connectionString", constr);
然而,試圖用分貝時,我得到一個錯誤,指出
此操作需要在「主」數據庫的連接。無法創建與「主」數據庫的連接,因爲原始數據庫連接已打開且憑據已從連接字符串中刪除。提供未打開的連接。
(同樣的操作工作,如果我只是提供new SqlConnection(constr)
連接...)
原來的SqlConnection
我被Ninject給出的QueryString
屬性爲空。我究竟做錯了什麼?
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
pro perty是空的。
你不是說'**查詢**字符串'你呢? – 2010-02-01 14:22:42
這是您唯一的'Bind'調用嗎?看不到'Get()'如果不能通過arg [並選擇ctor的非默認超載]。 –
2010-02-01 14:26:01
你確定'constr'是在你綁定的時候初始化的嗎? – 2010-02-01 16:54:28