我写了一个访问数据库的DLL。为此我有一个名为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数据库实现了一个concret实现。现在,如果另一databaseprovider应加入我必须做以下步骤:
- 的具体实施
- 创建一个类(如MySqlDbInterop)延长枚举(如MYSQL)
- 延长工厂允许用户获得新的实现
有没有办法,我不必扩展枚举和工厂,如果添加新的实现?
对我来说,你试图重新发明轮子。改为使用实体框架。 –
使用类似nInject的依赖注入?这是解决这类问题的通用解决方案。 –
什么是您的解决方案给你的.NET DbProviderFactory类不? http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx – Joe