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

17 c# asp.net ninject

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

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

gus*_*ico 38

我使用NInject来执行项目的依赖注入.我通常以下面的配置结束:

简单的工厂接口

public interface IDbConnectionFactory
{
    IDbConnection CreateConnection();
}
Run Code Online (Sandbox Code Playgroud)

工厂实施

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

NInject配置:

Bind<IDbConnectionFactory>()
    .To<SqlConnectionFactory>()
    .WithConstructorArgument("connectionString",
ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString);
Run Code Online (Sandbox Code Playgroud)

存储库的示例:

public class UserRepository : IUserRepository
{
    private readonly IDbConnectionFactory _dbConnectionFactory;

    public UserRepository(IDbConnectionFactory dbConnectionFactory)
    {
        _dbConnectionFactory = dbConnectionFactory;
    }

    public IEnumerable<User> List()
    {
        using (var dbConnection = _dbConnectionFactory.CreateConnection())
        {
            ....
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我总是让ADO.NET负责连接池.所以我每次都需要执行数据库操作时打开和关闭连接.

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