2012-01-13 5 views
2

У меня есть три проекта в моем решении C# 4.Как мне организовать решение C#?

  • MooDB: Имеет ли мой домен объекты в, NHibernate отображения, классы презентаций.
  • данных: имеет свои классы уровня доступа к данным (с использованием NHibernate)
  • Тест: есть мои тестовые классы

Вот скриншот:

enter image description here

Я заметил, что у меня есть app.config и hibernate.cfg.xml в моем проекте Test. Это кажется правильным. У меня нет app.config в моем проекте Data, который является проблемой, потому что я хочу использовать log4net в моем проекте Data, но я не могу его настроить, если там нет .

Каков наилучший способ настройки моего решения? Должен ли быть app.config для каждого проекта или для решения в целом? Нужен ли мне один для моего проекта Test? Я организовал его в соответствии с «лучшей практикой»?

+1

Я стараюсь устанавливать такие параметры, как строки подключения и т. Д. В app app.config для хостинга, и передавать их в библиотеки классов (в этом случае «Данные»). Плохая идея сделать библиотеку классов зависимой от внешних ресурсов, которые зависят от приложения. –

ответ

3

Обычно я вижу конфигурационные файлы на самом высоком уровне; который обычно является пользовательским интерфейсом или тестом.

Это имеет смысл (по крайней мере для меня), потому что приложение направляет слой данных, к которому репозиторий должен извлекать данные. Вероятно, ваш тестовый слой будет идти в другом месте, чем ваше производственное приложение; поэтому иметь конфигурацию в проекте Data не будет иметь большого смысла для меня ... это верхний слой, который «настраивает» нижние слои.

1

Если вы хотите, чтобы одно место, чтобы внести изменения в конфигурацию, вы можете настроить файлы в своем основном проекте и использовать post-build events, чтобы скопировать результирующие выходные файлы в папки bin других ваших исполняемых проектов.

Необходимо учитывать, является ли конфигурация, которую вы используете в своем основном приложении, такая же, как та, которую вы хотите использовать в модульных тестах. Если нет, то отдельные файлы конфигурации абсолютно в порядке.

+0

Что меня смущает, я не уверен, когда читаются файлы конфигурации. Если я нажимаю правой кнопкой мыши на RepoTests.cs и запускаю все тесты, какие файлы конфигурации читаются? Тот, что находится в проекте 'Test', или другие файлы конфигурации также читаются, если' Test' ссылается на 'Data'? –

+1

Конфигурационные файлы, которые считаются, связаны с исполняемым исполняемым (или тестовым) проектом. Это обычный вопрос SO (http://stackoverflow.com/questions/594298/c-sharp-dll-config-file), но когда вы думаете об этом, конфигурация log4net, которую вы хотите использовать при запуске производственного приложения, вероятно, отличается от того, что вы хотите во время тестирования. Вот почему конфигурация выполняется в файле конфигурации, а не в коде. –

+0

Ну ладно, имеет смысл спасибо –