2010-03-20 41 views
1

我正在寫一個相當簡單的程序,它可以「連接」到幾種不同類型的數據源,包括文本文件和各種數據庫。我已決定將這些連接類型中的每一個都實現爲從我稱爲iConnection的接口繼承的類。所以,例如,我有TextConnection,MySQLConnection,& c ...作爲類。我可以在.NET中使用一個類作爲對象來創建該類的實例嗎?

在另一個靜態類中,我有一個帶有人類可讀名稱的字典作爲關鍵字。對於每個字典條目的價值,我想要這個類本身。這樣,我可以做這樣的事情:

newConnection = new dict[connectionTypeString](); 

有沒有辦法做這樣的事情?我對C#相當陌生,所以我會很感激任何幫助。

回答

5

factory圖案另一變型。只是維持一個類型列表:

Dictionary<string, Type> pizzas = new Dictionary<string, Type> 
{ 
    { "HamAndMushroomPizza", typeof(HamAndMushroomPizza) }, 
    { "DeluxePizza", typeof(DeluxePizza) }, 
    { "HawaiianPizza", typeof(HawaiianPizza) } 
}; 

然後創建具體的實例:

string pizzaName = Console.ReadLine(); 

IPizza p = (IPizza)Activator.Create(pizzas[pizzaName]); 

Console.WriteLine("{0}'s Price: {1}", pizzaName, p.Price); 

這種方法的吸引力是當你無法預先確定你可以有多少比薩品種有,你買不起在每次有新類型的披薩(想到在運行時加載DLL)時重寫比薩工廠(開關語句)

6

我假設你意識到.NET Framework已經有一個IDbConnection接口和相應的實現器,它們已經完成了你似乎正在嘗試做的大部分工作?

無論如何,你要找的是Factory Method Pattern。工廠方法是一種方法,負責根據用戶提供的類型參數(通常是枚舉)創建特定接口的具體實例。

有一個C# example here,雖然有很多不同的方式來實現模式。

2

看看System.Data.Common命名空間中的DbProviderFactory類。您可以使用它爲給定的提供者創建連接,命令,數據適配器等。例如:

DbProviderFactory factory = DbProviderFactories.GetFactory(providerName); 
DbConnection connection = factory.CreateConnection(); 

在哪裏的providerName是類似 「System.Data.SqlClient的」 或 「System.Data.OleDb」 等

相關問題