2012-01-13 107 views
2

我在C#4解决方案中有三个项目。我应该如何组织我的c#解决方案?

  • MooDB:有我的域对象中,NHibernate的映射,呈现类。
  • 数据:有我的数据访问层类(使用NHibernate)
  • 测试:有我的测试类

以下是截图:

enter image description here

我已经注意到我在Test项目中有app.confighibernate.cfg.xml。这看起来没错。我的Data项目中没有app.config这是一个问题,因为我想在我的Data项目中使用log4net,但如果没有app.config那么我无法对其进行配置。

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

+1

我倾向于在主机应用程序的'app.config'中放置连接字符串等设置,并将这些设置传递给类库(本例中为'Data')。使类库依赖于特定于应用程序的外部资源是一个糟糕的主意。 – 2012-01-13 16:11:50

回答

3

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

这对我来说是有意义的(至少对我来说),因为应用程序正在将数据层指向它应该从中获取数据的存储库。您的测试图层可能会与您的生产应用程序不同,所以在Data项目中配置对我来说没什么意义......它是“配置”底层的顶层。

1

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

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

+0

让我感到困惑的是我不确定何时读取配置文件。如果我右键单击RepoTests.cs并运行所有测试,哪些配置文件被读取?如果'Test'引用'Data','Test'项目中的一个或者其他配置文件也会被读取? – 2012-01-13 16:13:10

+1

读取的配置文件与正在运行的可执行文件(或测试)项目相关。这是一个常见的SO问题(http://stackoverflow.com/questions/594298/c-sharp-dll-config-file),但是当您考虑运行生产应用程序时想要使用的log4net配置是可能与您在测试时想要的不同。这就是配置在配置文件中而不是在代码中完成的原因。 – 2012-01-13 16:16:43

+0

好的,很有道理谢谢 – 2012-01-13 16:22:12

相关问题