I am implementing solution where my application can connect with different database like Oracle,SQL,PLSQL etc.I am using Dapper .Net as an Orm.
I am confused How I can use two different database factory in my repository to get data from two different database
public interface IDatabaseAbstractionFactory
{
IDbConnection CreateOpenConnection();
}
public class SqlDatabaseFactory : IDatabaseAbstractionFactory
/// <summary>
///
/// </summary>
private readonly string connectionString;
/// <summary>
///
/// </summary>
/// <param name="connectionString"></param>
public SqlDatabaseFactory(string connectionString)
{
this.connectionString = connectionString;
}
public IDbConnection CreateConnection()
{
return new SqlConnection(connectionString);
}
}
public class OracleDatabaseFactory : IDatabaseAbstractionFactory
{
/// <summary>
///
/// </summary>
private readonly string connectionString;
/// <summary>
///
/// </summary>
/// <param name="connectionString"></param>
public OracleDatabaseFactory(string connectionString)
{
this.connectionString = connectionString;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IDbConnection CreateConnection()
{
return new OracleConnection(connectionString);
}
}
IOC Injection
public static void RegisterComponents(Microsoft.Practices.Unity.IUnityContainer container)
{
container.RegisterType<IDatabaseAbstractionFactory, OracleDatabaseFactory>(new InjectionConstructor(ConfigurationManager.ConnectionStrings["OracleConnnection"].ToString()));
container.RegisterType<IDatabaseAbstractionFactory, SqlDatabaseFactory>(new InjectionConstructor(ConfigurationManager.ConnectionStrings["SQLConnnection"].ToString()));
container.RegisterType<IPersonalInfoRepo, PersonalInfoRepoImpl>();
}
Repository Pattern:
enter code here
public class PersonalInfoRepoImpl: IPersonalInfoRepo
{
private readonly IDatabaseAbstractionFactory factory;
/// <summary>
/// Creates a new instance of the <see cref="OrderRepository"/> class.
/// </summary>
/// <param name="connectionFactory">A connection factory to class. Responsible for opening the connection. </param>
public PersonalInfoRepoImpl(IDatabaseAbstractionFactory connectionFactory)
{
this.factory = connectionFactory;
}
public void InsertPersonal(PersonalInfo pp)
{
IDatabaseAbstractionFactory factory = new Framework.Core.Connection.SqlDatabaseFactory("ConnectionString");
using (IDbConnection conn= factory.CreateConnection())
{
}
}
How I can dynamically set connection string in repository so that I don't need to pass it manually .Do I need to define abstraction .How I can improve it.
Aucun commentaire:
Enregistrer un commentaire