을 사용하여 을 열어 두지 않고 SqlConnection
으로 매핑하려고합니다. DB를 사용하려고 할 때Ninject : DbConnection을 묻는 메시지가 표시 될 때 열려 있지 않은 SqlConnection을 제공하십시오.
string constr = @"Server=.\SQLEXPRESS; Trusted_Connection=True; Database=TestDB";
Bind<DbConnection>().To<SqlConnection>()
.Using<OnePerRequestBehavior>()
.WithConstructorArgument("connectionString", constr);
는 그러나, 나는
이 작업은 '마스터'데이터베이스에 대한 연결이 필요 없다는 오류가 발생합니다 : 이것은 내가 한 일이다. 원래 데이터베이스 연결이 열리고 연결 문자열에서 자격 증명이 제거 되었기 때문에 '마스터'데이터베이스에 대한 연결을 만들 수 없습니다. 미개봉 된 연결부를 제공하십시오.
그것은 내가 Ninject에 의해 부여 된 SqlConnection
의 QueryString
속성이 비어 을 밝혀
(난 그냥 new SqlConnection(constr)
와의 연결을 제공하는 경우에도 동일한 작업을 ... 작동). 내가 도대체 뭘 잘못하고있는 겁니까?
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
프로로 표시됩니다. 퍼티가 비어 있습니다.
당신은'** Query ** String'을 의미하지 않습니까? –
이것이 유일한 Bind 호출입니까? 그렇다면'Get()'이 arg 전달에 실패 할 수있는 경우를 보지 못한다면 [ctor의 기본값이 아닌 과부하를 선택하십시오]. –
당신은'Bind' 시점에서'constr'가 초기화되어 있는지 확인 하시겠습니까? –