在 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 文件中添加一个条目?

在 Azure 辅助角色中获取连接字符串名称

您可以将它们放在 .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 中的强类型配置。我在我的项目中使用它。用法:

  1. 稍微探索一下代码以获得想法
  2. 定义强类型配置接口 - 查看配置。接口程序集
  3. 定义工厂/在组合根中使用 azure 配置提供程序,并使用字典适配器填充配置字典 -
  4. 在 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}";
    }
    

    }}