读取Spring框架连接字符串



这里的许多其他问题都集中在System.Configuration.ConfigurationManager…对于我的问题,我需要从Spring对象中提取连接字符串,以确定连接到的服务器,并删除使用应用程序的测试版本的任何横幅/警告。这个想法是,如果应用程序连接到"sp1-…",则是一个生产版本。

如何读取嵌套在App.config xml上下文中的对象?注意,它存在于Hibernate对象之外,因此(在我看来)必须存储在Spring库变量中。

下面是我的应用程序的App.config的一部分。

...
<spring>
  <context>
    <resource uri="config://spring/objects" />
  </context>
  <parsers>
    <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data" />
    <parser type="Spring.Transaction.Config.TxNamespaceParser, Spring.Data" />
  </parsers>
  <objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.net/tx" xmlns:db="http://www.springframework.net/database">
    <db:provider id="DbProvider" provider="SqlServer-2.0" connectionString="Data Source=st1-dskdb;Integrated Security=true;Database=AmericaMe_Test;" />
    <!-- HIBERNATE OBJECT -->
    <object id="MySessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12">
      <property name="ExposeTransactionAwareSessionFactory" value="true" />
      <property name="DbProvider" ref="DbProvider" />
...

如果给定一个正常的App.config设置,我将这样执行此操作:

// Remove the "WARNING Test Version" Label if not the production server (sp1...)
if (System.Configuration.ConfigurationManager.ConnectionStrings[0].ConnectionString.ToLower().Contains("sp1"))
{
    WarningBox.Visible = false;
    WarningLabel.Visible = false;
    MainTabController.Dock = DockStyle.Fill;
}

EDIT似乎XMLReader的方向是唯一的出路。在我看来有点野蛮,但这是我实现的工作代码:

// Remove the "WARNING Test Version" Label if not the production server (sp1...)
using (System.Xml.XmlReader appConfigReader = System.Xml.XmlReader.Create("AmericaMe.exe.config"))
{
    while (appConfigReader.Read())
    {
        string appConfigLine = appConfigReader.Name;
        if (appConfigLine.Contains("db:provider"))
        {
            string server = appConfigReader.GetAttribute(2);
            if (server.Contains("Source=sp1-"))
            {
                WarningBox.Visible = false;
                WarningLabel.Visible = false;
                MainTabController.Dock = DockStyle.Fill;
            }
            break;
        }
    }
}

这对于ConfigurationManager来说是不可能的,因为它只能理解在web中添加的connectionstring部分。配置文件。

您可能需要使用XmlReader手动解析xml。

相关内容

  • 没有找到相关文章

最新更新