民间,
我有一个非常n层的ASP.NET项目,按名称空间,但我需要分成三个项目:数据层,中间层和前端。
我这样做是因为......
A)这似乎是正确的,
B)我遇到了为ASP.NET托管程序集运行单元测试的各种问题。
无论如何,我的问题是,你在哪里保留配置信息?
现在,例如,我的中间层类(使用Linq to SQL)在实例化新数据上下文时会自动从web.config中提取连接字符串信息。
如果我的数据层在另一个项目中,可以/应该使用web.config来获取配置信息吗?
如果是这样,单元测试(通常在单独的程序集中)如何提供soch配置信息?
感谢您的时间!
答案 0 :(得分:2)
我们将它们保存在全局“设置”文件中,该文件恰好是XML。此文件包含所有GLOBAL设置,其中一个是指向相应服务器的连接字符串以及用户名和密码。然后,当我的应用程序使用它时,他们将所需的特定目录(数据库)放在连接字符串中。
我们为每个操作环境(prod,dev,staging等)提供了一个文件版本。然后,使用两个设置 - 文件路径(带有表示环境的标记)和环境 - 我可以选择正确的设置文件。
这也有30秒故障转移的好处。简单地更改设置文件中的服务器名称并重新启动应用程序(Web)并进行故障转移(当然,如果需要,您必须恢复数据)。
然后,当应用程序启动时,我们将正确的连接字符串写入web.config文件(如果它不同)。有了这个,我们可以通过更改一个appSettings值将网站从DEV更改为PROD。
答案 1 :(得分:2)
只要没有太多,就可以在web.config中使用它。当然,你的DAL应该完全不知道它来自那里。
一个很好的选择是,当您的数据层被要求执行某些操作时,它会被赋予其配置信息,并且当Web呼叫进入时,它将被要求执行某些操作。继续将信息放入您的数据层中web.config中。在我当前的项目中,我的数据层中有一个连接字符串的静态字典,我在从global.asax调用的例程中填写了这样的字典:
CAPPData.ConnectionStrings(DatabaseName.Foo) =
ConfigurationManager.ConnectionStrings("FooConnStr").ConnectionString()
CAPPData.ConnectionStrings(DatabaseName.Bar) =
ConfigurationManager.ConnectionStrings("BarConnStr").ConnectionString()
etc.
“注入”它就像一样可以用于自动测试目的,具体取决于您是否/如果您测试DAL。对我来说,这只是因为我不想制作单独的配置文件。
答案 2 :(得分:0)
出于测试目的,不要使用默认ctor实例化DataContext。将连接字符串信息传递给构造函数。
我更喜欢使用IoC框架将连接注入数据上下文,然后将上下文注入其他类。