有没有一种简单的方法在我的连接上使用依赖注入?

时间:2013-01-25 13:54:14

标签: c# asp.net ninject

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

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

1 个答案:

答案 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负责连接池。所以我每次都需要执行数据库操作时打开和关闭连接。

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