ApplicationSettings через библиотеки - PullRequest
0 голосов
/ 09 декабря 2008

Я пытаюсь абстрагировать весь код базы данных в отдельную библиотеку, а затем использовать эту библиотеку во всем моем коде. Все подключения к базе данных выполняются с использованием типовых адаптеров таблиц, которые я создаю путем перетаскивания наборов данных в VS2005 с использованием строки подключения из appSettings.

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

Короче говоря, у меня есть библиотека слоев базы данных, MyProgram.DbLayer, которая используется другими проектами, такими как MyProgram.Client и т. Д. Когда у меня были все наборы данных в .Client, строка подключения находилась в MyProgram.Client.exe. Конфиг, чтобы я мог изменить его после сборки. Когда я переместил его в MyProgram.DbLayer, этот параметр мне не доступен после того, как я собрал двоичные файлы.

EDIT: Похоже, это более общая проблема с ApplicationSettings.

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

Ответы [ 2 ]

1 голос
/ 09 декабря 2008

Если я правильно понимаю вашу проблему, похоже, вам понадобится

1.) Общий контекст приложения для всех вызовов доступа к данным

или

2.) Другой способ доступа к настройкам конфигурации

1: обернуть слой данных в службу, работающую в едином контексте (IIS, служба Windows и т. Д.)

2: Не используйте предоставленный вам механизм управления конфигурацией. Вместо этого используйте файлы свойств в определенном месте.

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

1 голос
/ 09 декабря 2008

AppSettings / ConnectionStrings всегда будет считываться из текущего запущенного пула приложений.

Под этим я подразумеваю:

Если у меня есть A.exe, у которого есть класс DAL.cs. DAL.cs читает строку подключения из конфигурации и возвращает "abc", как и ожидалось.

Затем я перемещаю DAL.cs в его собственный проект и, следовательно, в его собственную сборку. Я могу по-прежнему вызывать строку подключения из app.config, однако Мне нужно будет "разместить" сборку в работающем приложении и добавить строку подключения в конфигурацию приложения этого приложения . Итак, я создаю новый app.config и указываю в нем строку подключения "xyz", когда он работает, он работает как положено.

Теперь, если я изменю ссылку в проекте A.exe на новую DAL.dll, как вы думаете, какая строка подключения будет иметься? "xyz"? Нету! Он будет использовать "abc", как и раньше, потому что он все еще настроен в файле конфигурации приложения для A.exe.

Я знаю, что это работает, потому что я использовал общий код DAL во многих веб-приложениях Windows и .

Если что-то из этого неясно или не помогает вашей проблеме, пожалуйста, дайте мне знать, комментируя этот ответ.

Обновить следующий комментарий от OP

Под «хостом» я подразумеваю приложение, которое вызывает общий код. Это может быть Windows или веб-приложение, в основном это контекст приложения.

Вам потребуется создать записи в файлах конфигурации для каждого приложения, которое использует общий код. Если я неправильно понял ваш исходный вопрос (вполне возможно, это был долгий день!), И вы также хотите централизовать настройку, вам потребуется:

  • Создать некую форму централизованного хранилища (будь то XML, БД и т. Д.).
  • У вашего общего кода должны быть значения по умолчанию, чтобы он мог подключаться к централизованному хранилищу.
  • Оттуда код может сам настраиваться на основе информации в хранилище конфигурации.

Надеюсь, это поможет:)

...