我寫了一個訪問數據庫的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