Web.config和App.config的问题

Dry*_*ods 5 asp.net app-config web-config

介绍:

  • 通常我们在或中存储ConnectionStrings和一些其他设置(<appSettings> <add key...).Web.configApp.config

我的风景:

  • Web应用程序使用工厂模式直接注入读取数据提供者.

  • web.config我有密钥告诉我将使用哪个DLL(提供程序)来检索我的数据.

  • 我可以有多个提供程序(每个DLL将是MS SQL,MySQL的提供程序,或从某些SOA服务获取数据).

  • 每个DLL都有自己的名称(ID和名称空间),并且需要拥有自己的配置(dataconnections,service urls等...),第一个想法就是写入 app.config.

问题:

  • #1 - 网站正在运行(运行时)我需要更改数据提供者,我该怎么做?不知何故,写入的默认值Web.config将被更改.

    • 我的目标是能够拥有多个提供程序(并在运行时:添加/删除提供程序和更改配置) - 这引出了我的第二个问题:

    .

  • #2 - 每个数据提供者都有自定义配置,而App.Config文件不适用于dll程序集,只能用于可执行文件.这意味着我需要在我的Web.Config上编写(我不喜欢这个选项,因为我再次在运行时更新我的​​web.config).我该怎么解决这个问题?

    • 我试图避免编写自定义设置XML文件.我的理想的解决方案是以某种方式的部署DLLDLL.config每每个供应商.并且在运行时期间我可能需要更改此配置值.

.

Dry*_*ods 5

好的,当我在等待一些帮助时,我把手放在上班,我能找到一个好的解决方案(当然我认为:P).

让我与大家分享一下:

所以,我有一个Web应用程序,或一个控制台应用程序,或其他类型的应用程序,以及许多类库,我需要存储将在运行时更改的信息(每个Visual Studio项目不同).

将这些信息存储在Web.configApp.config不是一个好主意,因为它需要解决许多问题.

我看到的另一种方法是每个项目都有一个XML配置文件.

每个应用程序都将读取自己的XML并将其添加到缓存中CacheDependency(将在XML配置文件更新时过期).这样我们就不需要一直读取配置,并且我们也知道配置何时更改.

IMO THIS IS THE FASTEST AND EASIEST WAY TO SOLVE THE PROBLEM,不需要使用第三方框架(既不需要学习/编程它的时间).

.

示例代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        DBConfiguration cachConf;
        cachConf = Cache["cachConf"] as DBConfiguration;
        if (cachConf == null)
        {
            cachConf = new DBConfiguration();

            XmlDocument doc = new XmlDocument();
            doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/MyConf.xml");
            XmlNodeList xnl = doc.GetElementsByTagName("username");
            XmlElement xe = (XmlElement)xnl[0];
            cachConf.Username = xe.InnerText.ToString();
            xnl = doc.GetElementsByTagName("password");
            xe = (XmlElement)xnl[0];
            cachConf.Password = xe.InnerText.ToString();               

            Cache.Insert("cachConf", cachConf, 
                new System.Web.Caching.CacheDependency(
                    HttpContext.Current.Request.PhysicalApplicationPath + "MyConf.xml"),
                    DateTime.Now.AddMinutes(60), TimeSpan.Zero,
                    System.Web.Caching.CacheItemPriority.Default,
                    new System.Web.Caching.CacheItemRemovedCallback(
                        CacheItemRemovedCallBack));
        }
        LabelUsername.Text = cachConf.Username;
        LabelPassword.Text = cachConf.Password;            
    }

    private void CacheItemRemovedCallBack(string key, object value, CacheItemRemovedReason reason)
    {
        //Response.Write("Hello world"); 
    }
Run Code Online (Sandbox Code Playgroud)


ctf*_*ord 5

您可以将凭据存储在从 web.config 引用的辅助配置文件中,如下所示:

<appSettings file="AppSettings.config"/>
Run Code Online (Sandbox Code Playgroud)

您仍然需要小心避免外部文件上的编辑冲突。

  • 杰出的!经过 3 个小时的谷歌搜索,最后这是将 Web 项目的设置存储在单独文件中的唯一解决方案。 (2认同)