在 Azure 辅助角色中获取连接字符串名称
本文关键字:连接 字符串 获取 Azure 角色 | 更新日期: 2023-09-27 18:37:02
我目前正在将 IConfigFileSettings 的具体配置文件设置注入到需要连接字符串名称的类中。简化的代码如下所示:
public interface IConfigFileSettings
{
string GetConnectionString(string name);
}
public class ConfigFileSettings : IConfigFileSettings
{
public string GetConnectionString(string name)
{
return ConfigurationManager.ConnectionStrings[name].Name;
}
}
这适用于托管在 iis、Windows 服务和控制台应用程序中的 webapi。我想:
ConfigurationManager.ConnectionStrings[name].Name
不会在辅助角色中工作。我能否调整 GetConnectionString 方法,使其在所有环境中透明地工作?此外,即使我得到连接刺痛名称(例如来自 .cscfg 文件),我的代码也会查找:
<connectionStrings> ... </connectionStrings>
我想我不能只在 .cscfg 文件中添加一个条目?
您可以将它们放在 .cscfg 文件中,如下所示:
<?xml version="1.0"?>
<ServiceConfiguration serviceName="Web.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2013-03.2.0">
<Role name="Worker">
<Instances count="2" />
<ConfigurationSettings>
<Setting name="connectionstringname" value="connectionstringvalue" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>
然后,您可以通过以下方式阅读它们:
var connectionstring = RoleEnvironment.GetConfigurationSettingValue("connectionstringname");
这是一个小型实用程序,用于使用 Castle Windsor DictionaryAdapter 实现的 azure 中的强类型配置。我在我的项目中使用它。用法:
- 稍微探索一下代码以获得想法
- 定义强类型配置接口 - 查看配置。接口程序集
- 定义工厂/在组合根中使用 azure 配置提供程序,并使用字典适配器填充配置字典 - 像
在 MyWorkerService 中一样注入您的配置.cs
使用配置接口;使用持久性接口;使用Worker.Services.Interfaces;
命名空间 Worker.Services{ 公共类 我的工作者服务 : IMyWorker服务 { 私有只读 IConnectionString _connectionStrings; 私有只读 IAzureServiceConfiguration _azureServiceConfiguration; private readonly IMicrosoftStorageConfig _microsoftStorageConfig; 私有只读IPersitenceServiceConfigDependent _persitenceServiceConfigDependent; 私有只读 IAppConfigSettings _appConfigSettings;
public MyWorkerService( IPersitenceServiceConfigDependent persitenceServiceConfigDependent, IConnectionStrings connectionStrings, IAzureServiceConfiguration azureServiceConfiguration, IMicrosoftStorageConfig microsoftStorageConfig, IAppConfigSettings appConfigSettings) { _connectionStrings = connectionStrings; _azureServiceConfiguration = azureServiceConfiguration; _microsoftStorageConfig = microsoftStorageConfig; _persitenceServiceConfigDependent = persitenceServiceConfigDependent; _appConfigSettings = appConfigSettings; } public string DoWork() { _persitenceServiceConfigDependent.ConfigDependentAction("blah"); var configSetting = _microsoftStorageConfig.StorageConnectionString; return $"Job done :" + $" <br> msConfig : {configSetting}, " + $" <br> azureConfig.ServiceBusConnectionString:{_azureServiceConfiguration.ServiceBusConnectionString} " + $" <br> webConfig.SubscriptionId:{_appConfigSettings.SubscriptionId} " + $" <br> connectionStrings.DefaultConnection :{_connectionStrings.DefaultConnection}"; }
}}