2016-03-02 2 views
1

В настоящее время я вставляю конкретные ConfigFileSettings IConfigFileSettings в классы, которым требуется имя для строки подключения. Упрощенный код выглядит следующим образом:получение имени строки подключения в роли рабочего агента azure

public interface IConfigFileSettings 
{ 
    string GetConnectionString(string name); 
} 

public class ConfigFileSettings : IConfigFileSettings 
{ 
    public string GetConnectionString(string name) 
    { 
     return ConfigurationManager.ConnectionStrings[name].Name; 
    } 
} 

Это прекрасно работает для WebAPI размещенных в IIS, службы Windows и консольное приложения. Я думаю:

ConfigurationManager.ConnectionStrings[name].Name 

не будет работать в рабочих ролях. Могу ли я адаптировать метод GetConnectionString, чтобы он работал во всех средах прозрачно? Кроме того, даже если я получаю имя жала соединения (например, из .cscfg файла) мой код будет выглядеть как:

<connectionStrings> ... </connectionStrings> 

Я предполагаю, что я не могу просто добавить запись в файл .cscfg?

ответ

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"); 
+0

Спасибо. Однако я хочу сделать эту работу во всех средах. Я думаю, что можно использовать RoleEnvironment, чтобы определить, в какой среде я нахожусь. Правильно? – cs0815

1

This is a small utility for strong typed config in azure осуществляется с Castle Windsor DictionaryAdapter. Я использую его в своих проектах. Использование:

  1. Исследуйте код немного, чтобы получить представление
  2. Определите строго типизированный интерфейс конфигурации - Посмотрите на Configuration.Interfaces сборки
  3. Определите ваши заводы/использовать лазурный поставщик конфигурации в составе корне и использовать словарь адаптер для заполнения конфигурации словарей -
  4. Вводите свой конфиг, как и в MyWorkerService.cs

    использованием Configuration.Interfaces; с использованием Persistence.Interfaces; Использование Worker.Services.Interfaces;

    пространства имен Worker.Services { класс MyWorkerService общественности: IMyWorkerService { частных IConnectionStrings только для чтения _connectionStrings; private readonly IAzureServiceConfiguration _azureServiceConfiguration; private readonly IMicrosoftStorageConfig _microsoftStorageConfig; private readonly IPersitenceServiceConfigDependent _persitenceServiceConfigDependent; private readonly 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}"; 
    } 
    

    }}