我可以在.NET中使用类作为对象来创建该类的实例吗?

时间:2010-03-20 00:18:10

标签: c# ado.net

我正在编写一个相当简单的程序,它可以“连接”到几种不同类型的数据源,包括文本文件和各种数据库。我决定将这些连接类型中的每一个实现为从名为iConnection的接口继承的类。所以,例如,我有TextConnection,MySQLConnection,& c ......作为类。

在另一个静态类中,我有一个字典,其中包含人类可读的名称作为键。对于每个字典条目的值,我想要类本身。这样,我可以做以下事情:

newConnection = new dict[connectionTypeString]();

有没有办法做这样的事情?我对C#很新,所以我很感激任何帮助。

4 个答案:

答案 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)

去看看StructureMap。你可以使用some of these other alternatives

做一些非常酷的DI