Как я могу указать SubSonic 2 использовать другой файл .config?
-
21-09-2019 - |
Вопрос
Я использую SubSonic 2 из проекта и хотел бы указать файл .config, отличный от файла App.config по умолчанию.Как я могу указать SubSonic использовать определенный файл конфигурации?
Решение 2
Похоже, что вы можете сделать это, установив два свойства объектов SubSonic: DataService.ConfigSection
и DataProvider.DefaultConnectionString
.Как только они установлены, SubSonic не будет пытаться найти файл конфигурации приложения по умолчанию, он просто будет использовать предоставленные вами данные.
Например:
// Part 1: set the config section:
string configPath = Assembly.GetExecutingAssembly().Location + ".config";
ExeConfigurationFileMap execfg = new ExeConfigurationFileMap();
execfg.ExeConfigFilename = configPath;
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(execfg, ConfigurationUserLevel.None);
DataService.ConfigSection = (SubSonicSection)configuration.GetSection(ConfigurationSectionName.SUB_SONIC_SERVICE);
// Part 2: set the connection string
string connectionString = configuration.ConnectionStrings.ConnectionStrings["xLocal"].ConnectionString;
DataProvider provider = DataService.Provider;
provider.DefaultConnectionString = connectionString;
Кажется, это работает хорошо, однако иногда у меня возникает длительная задержка на второй и последней строке. DataProvider provider = DataService.Provider;
.Я не уверен, связано ли это с тем, что я здесь делаю, или это общая проблема с загрузкой сборки.Я задокументировал эту проблему в другом вопросе здесь: Вызов System.Web.Configuration.ProvidersHelper.InstantiateProviders, принимающий возраст и возраст (от SubSonic)
Другие советы
Нельзя — SubSonic работает с настройками провайдера, заданными для исполняющей среды.Вы могли бы, если хотите, использовать ConnectionStrings.config и поместить его куда-нибудь еще, но SubSonic использует ConfigurationManager, чтобы открыть конфигурацию приложения и найти в ней полезные возможности.