Передайте файл настроек соединения в DatabaseProviderFactory, Ent Library - PullRequest
2 голосов
/ 14 января 2010

Я использую .NET 3.5 / C #, и проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность зашифровать и расшифровать файл .config, который содержит все мои соединения с базой данных, которые будут использоваться с EnterpriseLibrary.Data.DatabaseProviderFactory, показанным в конце вопроса. Это шифрование и дешифрование выполняется по индивидуальному заказу и выполняется с использованием известного ключа и должно быть одинаковым для каждой машины, поэтому я не использую ProtectSection.

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

В настоящее время я (незашифрованный файл конфигурации) использую библиотеку MS Enterprise (v2) DatabaseProviderFactory в сочетании с классом FileConfigurationSource для поиска в файле App.config имени файла ConnectionSettings.config, в котором я храню настройки подключения к базе данных.

Затем я передаю путь к файлу ConnectionSettings в FileConfigurationSource, а затем передаю результат в DatabaseProviderFactory. что позволяет мне создать экземпляр базы данных.

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

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

Итак, по сути, мне нужно прочитать зашифрованный файл configurationSetings.config, расшифровать файл в памяти и передать расшифрованный содержимое этого файла в DatabaseProviderFactory, чтобы он мог получить доступ к настройкам соединения с базой данных или что-то подобное, чтобы я мог сопоставить с Microsoft.Practices.EnterpriseLibrary.Data.Database.

Любой код и / или совет будут высоко оценены.

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

Dave

App.config

  <enterpriseLibrary.ConfigurationSource selectedSource="fileSource">
    <sources>
      <add
        name="fileSource"
        type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b"
        filePath ="ConnectionSettings.config" />
      <add
        name="systemSource"
        type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b8b89dc1061d43b" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>

КОД МЕТОДА:

Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource fileConfig =
   new Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource(connectionSettingsConfigFile);

Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory dbProvider =
   new Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory(fileConfig);

if (string.IsNullOrEmpty(databaseConnectionName))
{
   database = dbProvider.CreateDefault();
}
else
{
   database = dbProvider.Create(databaseConnectionName);
}

CONNECTIONSETTINGS.CONFIG

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b" />
  </configSections>

  <dataConfiguration defaultDatabase="defaultConnection" />
  <connectionStrings>
    <add name="defaultConnection" connectionString="Data Source=192.11.111.11;Initial Catalog=TestDB;User Id:Test;Password:test"
        providerName="System.Data.SqlClient" />

  </connectionStrings>
</configuration>

Похоже, что вместо использования DatabaseProviderFactory, если он изменен для использования конкретной реализации, такой как SqlDatabase, он позволяет вам передавать connectionString как часть его конструктора, что делает его немного более гибким. Поэтому, поскольку я сейчас использую SqlDatabase, мне нужно выяснить, как передать содержимое расшифрованного файла конфигурации в виде строки в объект конфигурации. Есть идеи?

1 Ответ

3 голосов
/ 18 января 2010

В итоге я создал пользовательский файл конфигурации, имитирующий использование базы класса ConfigurationSettings для чтения файла .config, поэтому фактически удалил раздел конфигурации Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings вместе и заменил его на пользовательский класс конфигурации.

Надеюсь, это кому-нибудь поможет.

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