我正在寻找一种方法将我的连接注入我的存储库。我尝试使用SqlConnection
注入IDBConnection
,但是当NInject
尝试停用连接时遇到了一些问题,永远不会调用该事件。我无法弄清楚如何将连接字符串注入我的存储库。
有人可以给我一个建议吗?
答案 0 :(得分:36)
我使用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;
}
}
NInject配置:
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负责连接池。所以我每次都需要执行数据库操作时打开和关闭连接。
这种方法对我有用,并且如您在问题中提到的那样非常简单。