我正在寻找一种将我的连接注入我的存储库的方法。我尝试使用 注入SqlConnection
,IDBConnection
但是在NInject
尝试停用连接时遇到了一些问题,该事件永远不会被调用。而且我无法弄清楚如何将连接字符串注入我的存储库。
有人可以给我一个建议吗?
我使用 NInject 来执行我的项目的依赖注入。我通常以以下配置结束:
简单的工厂界面
public interface IDbConnectionFactory
{
IDbConnection CreateConnection();
}
工厂实施
public class SqlConnectionFactory : IDbConnectionFactory
{
private readonly string _connectionString;
public SqlConnectionFactory(string connectionString)
{
_connectionString = connectionString;
}
public IDbConnection CreateConnection()
{
var conn = new SqlConnection(_connectionString);
conn.Open();
return conn;
}
}
N注入配置:
Bind<IDbConnectionFactory>()
.To<SqlConnectionFactory>()
.WithConstructorArgument("connectionString",
ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString);
存储库示例:
public class UserRepository : IUserRepository
{
private readonly IDbConnectionFactory _dbConnectionFactory;
public UserRepository(IDbConnectionFactory dbConnectionFactory)
{
_dbConnectionFactory = dbConnectionFactory;
}
public IEnumerable<User> List()
{
using (var dbConnection = _dbConnectionFactory.CreateConnection())
{
....
}
}
}
编辑:我总是让 ADO.NET 负责连接池。因此,每次需要执行数据库操作时,我都会打开和关闭连接。
这种方法对我有用,并且正如您在问题中提到的那样非常简单。