2010-05-13 1 views
8

Хорошо, я знаю, что это может быть проблема дизайна, поэтому я хотел бы также отметить замечания по этому поводу.Как я могу обмениваться настройками конфигурации в нескольких проектах в Visual Studio?

У меня есть решение для веб-приложений Visual Studio. У меня есть три проекта: UserInterface, BusinessLogic и DataAccess.

Мне пришлось сохранить некоторые пользовательские настройки, и я создал configSections в файле конфигурации.

Доступ к этим конфигурационным разделам осуществляется через классы, которые наследуют базовый класс .NET ConfigurationSection.

Итак, для каждого проекта у меня было отдельное configSection, и для этого соответствующего configSection у меня был класс в этом проекте, наследующий от ConfigurationSection, для доступа к настройкам раздела конфигурации.

Это работает все сладкое. Но проблема возникает, если есть какая-либо настройка, которую мне нужно использовать для нескольких проектов. Поэтому, если мне нужно использовать параметр, определенный в конфигурационном проекте UserInterface, например, в проекте BusinessLogic, я должен сделать копию этого параметра в configSection BusinessLogic. В результате получается одна и та же настройка, скопированная на несколько конфигурационных разделов.

Разве это не слишком избыточно?

ответ

3

Помещенные общие настройки конфигурации в отдельном файле и использовать эту технику: http://blogs.msdn.com/jjameson/archive/2009/04/02/linked-files-in-visual-studio-solutions.aspx

+0

Необходимо сохранить эту ссылку, описать связанные файлы очень хорошо. – Will

+0

Хм. Разве это не очень похоже на создание «общего» проекта и включение в него общих настроек. И тогда остальная часть проектов могла бы получить доступ к Общему для этого? – neebz

0

Используя ваш пример:

Просто создать настройки в проекте Business Logic, а затем выставляют Getter к проекту пользовательского интерфейса ,

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

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

1

никогда на самом деле это сделать, но в теории это могло бы работать ...

Когда вы определяете раздел пользовательских настроек, установите его configSource во внешний файл (whatever.config). Этот внешний файл должен быть добавлен в РЕШЕНИЕ, а не проект. Он появится в разделе «Элементы решения». В каждом проекте добавьте существующий файл, перейдите в файл whatever.config, нажмите раскрывающийся список кнопки «Добавить» и выберите «Добавить как ссылку».

Whatever.config будет единственным файлом, который вы можете редактировать в разделе «Решения», и он копируется в каждое приложение во время компиляции.

+0

Да, я думал по тем же линиям. Единственная проблема, с которой я сталкиваюсь, это то, что я хотел, чтобы класс обработчика (который анализирует информацию из what.config) также был элементом решения.так что config + его синтаксический анализатор существует только один раз и связан с несколькими проектами. Хотя проблема заключается не в том, что визуальная студия скомпилирует класс, который находится на уровне элемента решения? Я не смог этого сделать. – neebz

0

Существует намного лучший способ сделать это, используя «Общие проекты», см. Мой ответ на very similar question here.

Смежные вопросы