Я написал DLL для доступа к базам данных. Therefor У меня есть интерфейс под названием IDbInterop который выглядит как:Завод для создания взаимодействия с базами данных
public interface IDbInterop
{
void ExecuteCommandNonQuery(string commandText, params IDbParameter[] commandParameter);
object ExecuteCommandScalar(string commandText, params IDbParameter[] commandParameter);
DataSet ExecuteCommandDataSet(string commandText, params IDbParameter[] commandParameter);
}
Чтобы получить экземпляр этого интерфейса для spezific databaseprovider, я уже представил завод, который принимает перечисление в качестве параметра, чтобы решить, какие конкретные реализации должны
public static class DbInteropFactory
{
public static IDbInterop BuildDbInterop(DbType dbType, string connectionString)
{
switch (dbType)
{
case DbType.MSSQL:
return new MSSQLDbInterop(connectionString);
default:
throw new ArgumentOutOfRangeException("dbType");
}
}
}
public enum DbType
{
MSSQL,
}
Я реализовал только реалистичную реализацию для баз данных MSSQL. Теперь, если другой databaseprovider следует добавить, мне придется сделать следующие шаги:
- Создать класс (например, MySqlDbInterop) для конкретной реализации
- Продолжим перечисление (например, MYSQL)
- Продлить завод чтобы позволить пользователю получить новую реализацию
Есть ли способ, чтобы мне не нужно было расширять перечисление и фабрику при добавлении новой реализации?
Кажется, вы пытаетесь изобрести колесо. Вместо этого используйте Entity Framework. –
Используйте что-то вроде nInject для инъекций зависимостей? Это общее решение этой проблемы. –
Что дает ваше решение, что класс .NET DbProviderFactory не работает? http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx – Joe