1

我目前正在将 IConfigFileSettings 的具体 ConfigFileSettings 注入到需要连接字符串名称的类中。简化的代码如下所示:

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

4

2 回答 2

1

您可以将它们放在 .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");
于 2016-03-02T20:56:12.197 回答
1

这是使用Castle Windsor DictionaryAdapter实现的天蓝色强类型配置的小实用程序。我在我的项目中使用它。用法 :

  1. 稍微探索一下代码以获得这个想法
  2. 定义您的强类型配置接口 - 查看 Configuration.Interfaces 程序集
  3. 在组合根目录中定义您的工厂/使用 azure 配置提供程序并使用字典适配器填充配置字典 -
  4. 像在 MyWorkerService.cs 中一样注入您的配置

    使用 Configuration.Interfaces;使用 Persistence.Interfaces;使用 Worker.Services.Interfaces;

    命名空间 Worker.Services { public class MyWorkerService : IMyWorkerService { private readonly IConnectionStrings _connectionStrings; 私有只读 IAzureServiceConfiguration _azureServiceConfiguration; 私有只读 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}";
    }
    

    } }

于 2016-08-05T10:10:07.720 回答