21

我正在寻找一种将我的连接注入我的存储库的方法。我尝试使用 注入SqlConnectionIDBConnection但是在NInject尝试停用连接时遇到了一些问题,该事件永远不会被调用。而且我无法弄清楚如何将连接字符串注入我的存储库。

有人可以给我一个建议吗?

4

1 回答 1

45

我使用 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 负责连接池。因此,每次需要执行数据库操作时,我都会打开和关闭连接。

这种方法对我有用,并且正如您在问题中提到的那样非常简单。

于 2013-01-25T13:57:12.640 回答