21

自分の接続をリポジトリに注入する方法を探しています。SqlConnectionを使用して注入しようとしましIDBConnectionたが、接続を非アクティブ化しようとすると問題が発生し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;
    }
}

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に接続プーリングを任せています。そのため、データベース操作を実行する必要があるたびに、接続を開いたり閉じたりします。

このアプローチは私にとってはうまくいき、質問で述べたように非常に簡単です。

于 2013-01-25T13:57:12.640 に答える