【问题标题】:How should I organize my c# solution?我应该如何组织我的 c# 解决方案?
【发布时间】:2012-01-13 16:07:00
【问题描述】:

我的 C# 4 解决方案中有三个项目。

  • MooDB: 包含我的域对象、NHibernate 映射、表示类。
  • 数据:有我的数据访问层类(使用 NHibernate)
  • 测试:有我的测试课程

截图如下:

我注意到我的Test 项目中有app.confighibernate.cfg.xml。这似乎是对的。我的Data 项目中没有app.config,这是一个问题,因为我想在我的Data 项目中使用log4net,但如果那里没有app.config,我将无法配置它。

设置解决方案的最佳方式是什么?每个项目或整个解决方案是否应该有一个app.config?我的Test 项目需要一个吗?我是否按照“最佳实践”组织它?

【问题讨论】:

  • 我倾向于将连接字符串等设置放在宿主应用程序的app.config 中,然后将它们传递给类库(在本例中为Data)。让类库依赖于特定于应用程序的外部资源是个坏主意。

标签: c# organization


【解决方案1】:

我通常在最高层看到配置文件;这通常是 UI 或测试。

这是有道理的(至少对我而言),因为应用程序将数据层定向到它应该从中获取数据的存储库。您的测试层可能会转到与生产应用程序不同的地方;所以在 Data 项目中进行配置对我来说没有多大意义......它是顶层“配置”底层。

【讨论】:

    【解决方案2】:

    如果您想在一个地方进行配置更改,您可以在主项目中配置文件并使用post-build events 将生成的输出文件复制到其他可执行项目的 bin 文件夹中。

    您需要考虑您在主应用程序中使用的配置是否与您要在单元测试中使用的配置相同。如果没有,那么单独的配置文件是绝对可以的。

    【讨论】:

    • 令我困惑的是我不确定何时读取配置文件。如果我右键单击 RepoTests.cs 并运行所有测试,会读取哪些配置文件? Test 项目中的那个,或者如果Test 引用Data,是否也会读取其他配置文件?
    • 读取的配置文件是与正在运行的可执行(或测试)项目相关联的配置文件。这是一个常见的 SO 问题 (stackoverflow.com/questions/594298/c-sharp-dll-config-file),但是当您考虑它时,您在运行生产应用程序时想要使用的 log4net 配置可能与您在测试时想要的配置不同。这就是为什么配置是在配置文件中而不是在代码中完成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多