![]() |
1
1
系统。配置。配置管理器。连接字符串和系统。配置。配置管理器。应用程序设置 包含执行应用程序的设置,以便在DAL中可以获取存储在web.config文件中的设置。 对于您的系统,您可以创建一个自定义配置部分,该部分将位于您的web.config文件或DAL的consumer*.config文件中。在这些配置文件中,您可以指定它们从您的设计和位置的单独配置文件加载。 Referencing external config files from Web.Config How to: Create Custom Configuration Sections Using ConfigurationSection 或者,您可以使用以下命令从任何文件手动加载DAL配置数据 ConfigurationManager.OpenExeConfiguration |
![]() |
2
3
您可以添加一个名为app.config的web.config文件的等效文件,该文件编译成一个以代码隐藏的dll或exe项目命名的文件。这是完全可变的,无需重新编译。您可以使用连接字符串的标准设置和可以在键/值对中定义的各种应用程序设置,或者通过更多的工作,您可以定义自己的自定义配置设置类和部分。你甚至可以在应用配置中引用设置,这样你就可以在应用中存储3个设置(DEV、QA、PROD),然后在运行时在app.config文件中只引用你想要的设置。下面是一个为Web服务设置创建的示例。
<?xml版本=“1.0”编码=“utf-8”?>
|
![]() |
3
2
如果我没记错的话,听起来你不明白web.config/app.config是如何工作的。假设你有一个如下结构: DAL项目 参考文献
课程:
Web项目 参考文献
页:
在DatabaseHelper类中,您可以这样引用连接字符串:
当这种情况在运行时发生时,DatabaseHelper类将在与网页相同的应用程序域下运行,因此,对ConfigurationManager的任何调用都将从web项目提供的web.config文件加载请求。 因此,您只需要在web/console/winforms/etc..项目中有一个配置文件,而不必担心在设计时在每个类库项目中都有一个。 如果您实际将DAL作为服务或单独的控制台应用程序或其他东西运行,那么只有到那时,您才需要为DAL项目提供自己的app.config/webweb.config文件。 |
![]() |
4
2
把它分开。使用固定的XML存储文件解决方案进行数据库连接,使用加密。NET的内置加密器函数(不要自己滚动)。然后,使用由此产生的数据库连接,在数据库中查找您的“设置表”。这样,您就可以在不重新部署的情况下修改设置。如果您的客户需要能够在没有visual studio的情况下更改数据库连接字符串,只需编写一个能够生成加密连接字符串并保存固定XML存储文件的小型Windows Forms应用程序,如有必要,还可以连接到DB(通过同一文件)并根据用户需要修改设置表。 |
![]() |
5
1
一种完全不同的方法是使用 SQLite 并将所有应用程序设置存储在其中。如果这对应用程序很重要,您可以对有问题的数据库进行密码保护,并且可以创建一些简单的属性/值表来存储数据。 使用 SQLite ADO adapter 只需要在项目中添加一个额外的DLL来访问设置,那些不想使用Visual Studio的人也可以访问SQLite数据库本身。甚至还有一个Firefox插件可以与SQLite数据库交互。 |
![]() |
6
1
您可以将设置存储在任何旧的Xml文件中,并使用XmlSerializer获取您的类并将其转换为<->从Xml。在另一个 answer 我写了一些代码来做到这一点。链接答案序列化了一系列简单对象,但它也可以序列化一个大型配置对象。 因为XmlSerializer在公共属性之间进行序列化,如果你不想允许值更改,你可能需要使类本身不可变(冰棒风格),或者在反序列化的外观前面有一个只读的外观。 这是一个方便的把戏。您可以通过ConfigurationManager进行设置。AppSetting[]具有自己的配置部分和外部文件引用,或者您也可以为每个配置类硬编码一个特定的xml文件名。 |
![]() |
7
1
看看 Config.Net - 最简单的配置框架。NET开发人员 . 一个全面的易于使用和强大的。NET配置库,完全覆盖了单元测试,并在数千台服务器和应用程序上进行了测试。 |
![]() |
8
0
您可以有一个映射DAL上使用的设置的界面。然后,在应用程序上,您可以使用IoC将设置提供给DAL。 |
![]() |
9
0
如果你使用的是DI框架(如Unity),你可以指定构造函数参数。因此,假设您的DAL提供者可以有一个接受其连接字符串的构造函数。 我知道你不能在接口中强制构造函数,但这是我们必须处理的问题。我知道这个框架有一些地方对构造函数签名有潜在的依赖关系。.. |