Похоже, что вы можете сделать это, установив два свойства объектов 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;
Похоже, это работает хорошо, но иногда я испытываю длительную задержку от 2-й до последней строки DataProvider provider = DataService.Provider;
. Я не уверен, связано ли это с тем, что я здесь делаю, или это общая проблема загрузки сборок. Я задокументировал эту проблему в другом вопросе здесь: Вызов System.Web.Configuration.ProvidersHelper.InstantiateProviders, принимая возраст и возраст (от SubSonic)