2010-06-30 40 views
2

我有一个解决方案,其中包含3个项目,每个项目都需要访问某些设置。我正在寻找一种方法将这些设置值用于来自1个不同来源的任何项目。我无法使用.Config文件,因为这与该特定项目相关。应用程序适用于所有项目的宽设置

我可以使用数据库,但都被告知这是不好的做法(没有原因)

任何想法?

+0

我们在这里说的是WinForms/desktop还是ASP.Net? – DOK 2010-06-30 14:42:48

+1

我总是将设置存储在数据库中,但连接数据库所需的设置或特定于工作站的设置除外。数据库强大且集中,旨在存储数据;设置是数据! – 2010-06-30 14:50:13

+0

@Dok ASP.net ... – LiamB 2010-06-30 14:50:43

回答

9

你可以这样做:

  • 创建解决方案中的文件夹中的solution.config
  • 在每个项目的app.config,添加到您的<appSettings>节点:

    <appSettings file="solution.config"> 
        .... 
    </appSettings> 
    

你会必须将符号链接放在每个共同的solution.config中项目文件夹 - 但您可以在项目中共享一个单独的物理文件。

<appSettings>节点是唯一一个允许诸如此类的“累积性”设置 - 那些从file=指定的文件将被添加到您的应用程序设置,但任何你在你的app.config明确指定潜在的覆盖。

另一方面,是的,当然,你可以使用数据库。我们在大多数项目中也这样做,因为我们通常可以访问数据库,但不能访问客户端服务器计算机中的文件系统。我不明白为什么这应该是一件坏事 - 我们在表中设置了DEV,TEST和PROD - 所以您将所有设置都放在一个地方 - 我们在需要时选择所需的设置。工作得很好 - 当然,像数据库的连接字符串这样的设置不能存储在那里 - 但是我们的配置信息的大部分是。再说一遍:我真的不明白为什么这本应该是一个糟糕的选择本身 - 所以除非你的消息来源能够以某些事实和理由支持他/她的陈述,否则我会忽略它。

2

您可以在定义的configSection中定义configSource属性,以引用从中加载属性的外部文件。 在这里你可以找到一个例子:

Is there any way for an App.config file to reference another full config file? (.NET)

您还可以使用DB当然,但是这可能会涉及开发某种配置控制台的,因为它不是管理配置一个很好的做法属性直接进入D B。

否则,您可以创建您的配置文件(例如xml或yaml)并创建您自己的共享配置解析器。

0

您可以在每个指向全局项目的项目.config文件中添加一个条目。但你需要在三个地方阅读。

想到的另一个解决方案是将您的通用设置与自己的.config文件放到它们自己的程序集中。然后,您将该程序集包含在您的每个项目中。 .config文件在程序集中读取,您可以读出所需的值。

+0

我发现如果将设置添加到另一个程序集的.config中,然后使用该程序集中的某个函数来读取它,它将使用本地项目的配置 – LiamB 2010-06-30 14:55:33

+0

@皮诺 - 我确信我以前做过这件事,但那是在一家老公司,所以我没有资料来仔细检查。我现在要去调查。 – ChrisF 2010-06-30 15:09:14

0

什么样的设置?

您可以使用系统范围的machine.config和web.config文件来设置适用于整个机器的设置。

\Windows\Microsoft.NET\Framework[64]\[version]\config\machine.config 
\Windows\Microsoft.NET\Framework[64]\[version]\config\web.config 
0

如果您有权访问它,则可以使用注册表。然后,你需要的是一个课程来读出它们(并且有可能将它们放入),并且每个项目都可以使用该课程来阅读它们。

但是,主要的缺点是您必须将设置添加到您运行解决方案的每台机器注册表中。

+0

哦,男孩 - 注册表 - 这是1990年代的.....这是真正的死技术 - 克服它。使用比注册表更易于管理的东西..... – 2010-06-30 15:01:37

1

我使用Singleton模式或Global实例(无论您的首选项是否)创建一个类来保存系统范围的设置。

如果解决方案中有其他项目,它可以看到该类(添加引用时)。

这也将存储机制(数据库,配置文件,自定义XML文件等)的设置表示分离出来,如果设计到接口,它也会使单元测试更加灵活。

相关问题