我正在编写一个相当简单的程序,它可以“连接”到几种不同类型的数据源,包括文本文件和各种数据库。我决定将这些连接类型中的每一个实现为从名为iConnection的接口继承的类。所以,例如,我有TextConnection,MySQLConnection,& c ......作为类。
在另一个静态类中,我有一个字典,其中包含人类可读的名称作为键。对于每个字典条目的值,我想要类本身。这样,我可以做以下事情:
newConnection = new dict[connectionTypeString]();
有没有办法做这样的事情?我对C#很新,所以我很感激任何帮助。
答案 0 :(得分:6)
我假设您已经意识到.NET Framework已经有一个IDbConnection接口和相应的实现者,它们已经完成了您尝试做的大部分工作?
无论如何,你要找的是Factory Method Pattern。工厂方法是一种方法,负责根据用户提供的类型参数(通常是枚举)创建特定接口的具体实例。
有一个C# example here,虽然有很多不同的方法可以实现这种模式。
答案 1 :(得分: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)时,您都无法承担重写披萨工厂(切换语句)的费用
答案 2 :(得分:2)
查看System.Data.Common命名空间中的DbProviderFactory类。您可以使用它为给定的提供程序创建连接,命令,数据适配器等。示例:
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
其中providerName类似于“System.Data.SqlClient”或“System.Data.OleDb”等。
答案 3 :(得分:0)