В моей процедуре инициализации IContainer настроено следующее:
x.For<IDbConnection>().Use<SqlConnection>().Ctor<string>().Is(MY_SQL_CONNECTION_STRING);
Вот конструктор для моей службы:
private readonly IForumRepository _repo;
public ForumService(IForumRepository repo)
{
_repo = repo;
}
А вот конструктор для моего хранилища:
private readonly IDbConnection _cn;
public ForumRepository(IDbConnection connection)
{
_cn = connection;
}
В одной из моих подпрограмм обслуживания я вызываю метод для получения объекта в моем хранилище, а затем, возвращаясь на уровень обслуживания, я вызываю второй метод в своем хранилище - однако при втором вызове хранилища мой Соединение (_cn) больше не имеет связанной с ним строки соединения (похоже, оно стирается при выходе из блока using {} при первом вызове моей службой метода в хранилище.
Вот первый метод, который я вызываю в хранилище.
public Tag GetTag(int id)
{
Tag o;
const string q = @"select * from tags where id = @pId";
using (_cn)
{
_cn.Open();
o = _cn.Query<Tag>(q, new { pId = id }).SingleOrDefault();
} *** AT THIS POINT THE CONN STRING PROPERTY OF _CN IS CLEARED?!
return o;
}
Я бы подумал, что это должно работать нормально, поскольку конструктор для моей службы создает экземпляр SQL-соединения, в котором нормально используется первый вызов репозитория, и видел, как последующие вызовы моего репо находятся в той же области действия, что и я Я думал, что зависимость SqlConnection в хранилище должна по-прежнему сохранять детали исходной строки подключения.
Может кто-нибудь, пожалуйста, пролить свет на то, где я ошибаюсь?