Широкие настройки приложения доступны для всех проектов - PullRequest
4 голосов
/ 30 июня 2010

У меня есть решение с 3 проектами, для каждого проекта требуется доступ к определенным настройкам. Я ищу способ сделать эти значения настроек доступными для любого проекта из 1 отдельного источника. Я не могу использовать файл .Config, так как он подходит для этого конкретного проекта.

Я мог бы использовать базу данных, но мне сказали, что это не очень хорошая практика (без причины)

Есть идеи?

Ответы [ 6 ]

10 голосов
/ 30 июня 2010

Вы можете сделать это:

  • создать solution.config в папке вашего решения
  • в app.config каждого проекта, добавить его в ваш <appSettings> узел:

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

Вы должны будете поместить символические ссылки на ваш общий solution.config в каждую папку проекта, но у вас может быть один физический файл, которым вы делитесь между проектами.

Узел <appSettings> является единственным, который позволяет подобного рода "кумулятивные" настройки - те из файла, который указан в file=, будут добавлены в настройки вашего приложения, но потенциально могут быть перезаписаны любым указанным вами параметром.явно в вашем app.config.

С другой стороны, да, конечно, вы можете использовать базу данных.Мы делаем это также в большинстве наших проектов, поскольку у нас обычно есть доступ к базе данных, но не к файловой системе на серверах клиента.Я не понимаю, почему это обязательно должно быть плохо - у нас есть настройки для DEV, TEST и PROD в таблице - поэтому у вас есть все ваши настройки в одном месте - и мы выбираем те настройки, которые нам нужны, когда они нам нужны.Работает просто отлично - конечно, некоторые настройки, такие как строки подключения к базе данных, не могут быть сохранены там, но основная часть нашей информации о конфигурации есть.Опять же: я действительно не вижу причин, по которым этот выбор должен быть плохим сам по себе - поэтому, если ваш источник не сможет подтвердить свое заявление некоторыми фактами и причинами, я бы его проигнорировал.

2 голосов
/ 30 июня 2010

Вы можете определить атрибут configSource в определенном configSection, чтобы ссылаться на внешний файл, из которого можно загрузить ваши свойства. Здесь вы можете найти пример:

Есть ли способ для файла App.config сослаться на другой полный файл конфигурации? (.NET)

Конечно, вы также можете использовать БД, но это, вероятно, потребует разработки какой-либо консоли конфигурации, поскольку не рекомендуется управлять атрибутами конфигурации напрямую в БД.

В противном случае вы можете создать свой конфигурационный файл (например, xml или yaml) и создать собственный общий анализатор конфигурации.

1 голос
/ 30 июня 2010

Я создаю класс для хранения общесистемных настроек, используя шаблон Singleton или глобальный экземпляр (в зависимости от того, что вы предпочитаете).

Если в решении есть другой проект, он может видеть класс (при добавлении ссылок).

Это также разъединяет представление настроек из механизма хранения (база данных, файл конфигурации, пользовательский файл XML и т. Д.), И если вы разрабатываете интерфейс, это также делает модульное тестирование более гибким.

0 голосов
/ 30 июня 2010

Вы можете использовать реестр, если у вас есть доступ к нему.Тогда все, что вам нужно, это класс для их чтения (и, возможно, один для их вставки), и каждый проект может использовать этот класс для их чтения.

Основной недостаток заключается в том, что вам придется добавитьнастройки реестра каждой машины, на которой вы запускаете свое решение.

0 голосов
/ 30 июня 2010

Какие настройки?

Вы можете использовать системные файлы machine.config и web.config для настроек, которые применяются ко всей машине.

\Windows\Microsoft.NET\Framework[64]\[version]\config\machine.config
\Windows\Microsoft.NET\Framework[64]\[version]\config\web.config
0 голосов
/ 30 июня 2010

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

Другое решение, которое приходит на ум, - это поместить ваши общие настройки в их собственную сборку с собственным файлом .config. Затем вы включаете эту сборку в каждый из ваших проектов. Файл .config читается в сборке, и вы можете прочитать те значения, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...