我正在创建一个类库,其中包含我在开发的应用程序中经常使用的所有自定义类。该库被编译并作为参考添加到我的每个应用程序中,使我能够调用该库中包含的自定义类。
我的库中的自定义类包括多层继承,但它们最终都起源于我称为“Alpha”的基类。在该类中,我还保存连接字符串,以便库中的所有其他类继承它。许多类都大量使用 ADO 来与 SQL 数据库进行通信,因此让所有类都可以使用连接字符串至关重要。
我遇到的问题是,我想要使用类库的每个应用程序都有自己的数据库,因此需要每个应用程序独有的连接字符串。因此,连接字符串不能包含在我的类库中,因为这意味着我使用类库的所有应用程序都将寻找相同的 SQL 数据库。但是,如果我从“Alpha”类中删除连接字符串,则类库将无法编译,因为它使用 ADO.NET 的所有方法都在查找该连接字符串。
这有点像先有鸡还是先有蛋的情况。
即我需要 Alpha 类中的连接字符串才能编译类库。
即连接字符串不能位于类库中,因为我需要它对于每个应用程序都是唯一的
我能想到的唯一解决方案是为我的类库中使用 ADO 的每个方法提供一个参数来保存连接字符串,然后可以从应用程序代码传入该参数。但这似乎不是解决这个问题的一个非常简洁的方法。
理想情况下,我想要的是每个应用程序中的一个位置来存储连接字符串。然后,我需要某种方式来引用类库中的该位置,即使在编写类库时该位置不可用(因为它位于各个应用程序内部)。
通常,连接字符串在应用程序的生命周期内是不变的,因此您可以从实际客户端应用程序的 app.config 中提取它,并要求使用您的库,客户端应用程序将此字符串传递到您的库。
因此,我决定在我的库中创建一个全局帮助程序类,在其中存储从客户端应用程序传递的连接字符串,然后我的内部库方法使用此全局属性来读取连接。
public static class DatabaseHelper
{
public static DbConnectionString {get;set;}
}
然后客户端应用程序在启动调用期间
DatabaseHelper.DbConnectionString = ConfigurationManager.ConnectionStrings["MyDbCon"].ConnectionString;
在我的图书馆时
public DataTable CustomerTable()
{
using(SqlConnection cn = new SqlConnection(DataBaseHelper.DbConnectionString))
......
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)