Вопрос

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

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

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

РЕДАКТИРОВАТЬ:Кажется, это более общая проблема с ApplicationSettings.

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

Это было полезно?

Решение

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. и Веб-приложения.

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

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

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

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

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

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

Другие советы

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

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

или

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top