如何在其他配置元素中引用配置元素值?

时间:2009-03-27 22:45:51

标签: asp.net xml configuration

例如,我创建了一个使用数据库的提供者服务。在web.config中,如何将提供者的连接字符串设置为主应用程序连接字符串,在< ConnectionStrings>中定义?

2 个答案:

答案 0 :(得分:1)

您可以创建一个自定义配置元素来读取主应用配置的配置。

不要把这一行换成行,而是像......

public class ProviderConfiguration : ConfigurationSection
{
    #region Constructors
    public ProviderConfiguration () { }
    #endregion

    #region Public Properties
    [ConfigurationProperty("ProviderConnection")]
    public ProvderSettingsConfigElement ProvderConnection
    {
        get { return (ProvderSettingsConfigElement)this["ProviderConnection"]; }
    }

    #endregion
}

public class ProvderSettingsConfigElement : ConfigurationElement
{
    #region Constructors
    public ProvderSettingsConfigElement () { }

    public WebSecuritySettingsDataProviderElement(string name, string type)
    {
        ConnectionString = ConfigurationManager.Get("mainAppConnString");
    }

    #region Public Properties
    [ConfigurationProperty("connectionString")]
    public string ConnectionString{get; set;}

}

答案 1 :(得分:1)

Matt的答案非常多,有几个调整。

如果您很高兴将其置于配置代码本身之外,那么一旦您选择了提供程序配置,您就可以直接从提供程序类与主连接字符串部分进行通信:

var provider = ConfigurationManager.GetSection("ProviderConfiguration")
                as ProdviderSettingsSection;

ConnectionString connStr = 
    WebConfigurationManager.ConnectionStrings[provider.ConnectionString];

如果您希望将其全部包含在提供程序中,则需要为您的属性提供支持字段:

public class ProvderSettingsConfigElement : ConfigurationElement {
  private m_ConnectionString;

  [ConfigurationProperty("connectionString")]
  public string ConnectionString{
    // Probably want to check m_ConnectionString for IsNullOrEmpty
    get{ return WebConfigurationManager.ConnectionStrings[m_ConnectionString]; } 
    set{ m_ConnectionString = value;}
  }
}