Ответ 1
Я использую NInject для выполнения инъекций зависимостей моих проектов. Я обычно заканчиваю конфигурацию ниже:
Простой интерфейс Factory
public interface IDbConnectionFactory
{
IDbConnection CreateConnection();
}
Factory Реализация
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 Config:
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 заботиться о пуле соединений. Поэтому я открываю и закрываю соединение каждый раз, когда мне нужно выполнить операцию с базой данных.
Этот подход работает для меня и очень прост, как вы упомянули в своем вопросе.