【发布时间】:2011-10-17 16:53:11
【问题描述】:
我在 IContainer Initialize 例程中配置了以下内容:
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 连接,对 repo 的第一次调用可以很好地利用它,并且看到对我的 repo 的后续调用在同一个服务范围内以为仓库的 SqlConnection 依赖应该还是保留原来的连接字符串细节。
有人可以说明我在哪里出错了吗?
【问题讨论】:
标签: asp.net asp.net-mvc-3 dependency-injection ioc-container structuremap