自分の接続をリポジトリに注入する方法を探しています。SqlConnection
を使用して注入しようとしましIDBConnection
たが、接続を非アクティブ化しようとすると問題が発生しNInject
、イベントが呼び出されません。また、接続文字列をリポジトリに挿入する方法がわかりません。
誰かが私に提案を提供できますか?
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に接続プーリングを任せています。そのため、データベース操作を実行する必要があるたびに、接続を開いたり閉じたりします。
このアプローチは私にとってはうまくいき、質問で述べたように非常に簡単です。