Использование файла app.config из AppDomain вместо корневой папки

Я создаю приложение WPF, которое считывает ConnectionString, созданное во время выполнения в AppDomain. Он работает отлично, пока я не начну использовать наборы данных, поскольку они указывают на файл app.config по умолчанию в корне моего приложения.

Когда я впервые загружаю приложение, connString сохраняется как переменная для последующего использования. Моя первая интуиция заключалась в том, чтобы использовать эту переменную для моего соединения. Так как это означало бы меньше IO read7write и, таким образом, сделало бы систему быстрее. Мне удалось дойти до изменения строки подключения, но где-то в конце концов мне нужно было инициировать, и я не знал, где.

Теперь я пытаюсь выяснить, как я могу заставить файл набора данных (или настроек) читать файл app.config, расположенный в AppDomain, вместо файла по умолчанию, расположенного в моей корневой папке приложения.

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

Моя главная цель — централизовать данные в переменной или в одном файле, так как это вызовет меньше головной боли в будущем.

Заранее спасибо!


person CogentP    schedule 18.03.2013    source источник
comment
В вашем вопросе написана плохая практика, слишком много внимания уделяется микрооптимизации. Вы вообще не объясняете, почему вы используете отдельный AppDomain, и вы даете ему другой файл .config. Очень сложно заставить это окупиться в приложении WPF. Так высоки шансы, что это еще одна микрооптимизация, которая теперь доставляет вам неприятности. Потерять домен приложения.   -  person Hans Passant    schedule 18.03.2013
comment
Ганс, на самом деле это не проблема чрезмерной оптимизации, а скорее проблема гибкости. Я использую AppDomain, потому что, когда я выпускаю новые обновления для своего программного обеспечения, файл app.config в корне приложения будет уничтожен. Таким образом, AppDomain помогает защитить определенные пользовательские данные от обновлений. Но возвращаясь к моей проблеме, я думаю, что смог решить ее, хотя и не идеально (эффективно). Скоро напишу ответ, чтобы другие могли видеть.   -  person CogentP    schedule 18.03.2013


Ответы (1)


в основном я смог решить проблему:

Если вам интересно, в чем на самом деле была проблема: я не хотел, чтобы код считывал файл app.config для получения ConnectionString. Так как когда я запускаю систему, я читал ее один раз, нет большого смысла продолжать читать ее на протяжении всего использования системы.

КСТАТИ, ЭТО ПРИЛОЖЕНИЕ WPF С БД SQL SERVER 2012.

Итак, как это делается:

ШАГ 1. Перейдите в «Настройки» («Проект» > «Настройки») и создайте новый элемент с именем DBConnString (выберите ConnectionString в качестве типа и Приложение в качестве области действия). И введите какой-нибудь стандартный ConnectionString. Введенная строка должна быть реальной, так как наборы данных будут считывать ее во время разработки.

ШАГ 2: Нажмите F7 на странице настроек, чтобы просмотреть программный код. Введите этот код:

Partial Friend NotInheritable Class MySettings

Private Sub MySettings_SettingsLoaded(sender As Object, e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded
    Me.Item("DBConnString") = ConnStringVariable
End Sub End Class

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

ШАГ 3: Создайте набор данных и DataTable, и когда вам будет предложено подключиться, вы увидите новую опцию: DBConnString (MySettings). Выберите это.

Помните, что во время разработки таблицы данных будут использовать строку ConnString по умолчанию, которую вы написали вручную, но во время выполнения класс Settings.vb (или cs) заменит значение по умолчанию переменной.

Этот простой трюк позволит вам использовать переменную ConnectionString для повторного использования во всем проекте без необходимости доступа к диску каждый раз, когда он пытается подключиться к БД!

person CogentP    schedule 20.03.2013