从 Spring.NET xml 配置访问 ConfigurationManager.AppSettings 值

2024-01-05

我有一个要求,要求我使用 Spring.net 获取存储在 app.config 中的连接字符串,然后将检索到的连接字符串注入到实例化对象中。

我如何使用 Spring.net 的 xml 配置来做到这一点?

例如,我的代码不这样做:

// Spring.net config:
<object name="myService" type="com.acme.MyService, com.acme">
    <constructor-arg type="System.String" value="myConnectionName"/>
</object>

// Web.config:
<connectionStrings>
    <add name="myConnectionName" connectionString="DB_connectionstring"/>
</connectionStrings>
// Codes:
public class MyService {
    public MyService(string connectionName) {
        var connectionString = ConfigurationManager.AppSettings[connectionName];
        // use connectionString to create a DB connection, etc
    }
}

我想要这样的:

 // Spring.net config:
<object name="myService" type="com.acme.MyService, com.acme">
    <constructor-arg type="System.String" ref="retrievedConnectionString"/>
</object>    
// How to make a call similar to "ConfigurationManager.AppSettings[connectionName]" and get the connection string from Web.config and put inside "retrievedConnectionString"?

// Web.config:
<connectionStrings>
    <add name="myConnectionName" connectionString="DB_connectionstring"/>
</connectionStrings>
// Codes:
public class MyService {
    public MyService(string connectionString) {
        // use connectionString to create a DB connection, etc
    }
}

是否可以打电话ConfigurationManager.AppSettings[..]来自 Spring.net xml 配置?


过去我用过一个表达 http://www.springframework.net/doc-latest/reference/html/expressions.html为了实现这一点,但通过这个问题和 bbaia 的回答,我发现更好的方法是使用VariablePlaceholderConfigurer。当您使用VariablePlaceholderConfigurer而不是我的“表达黑客”,你不会把自己束缚在appSettings / connectionStrings变量的样式配置:您可以切换到其中之一VariableSources http://www.springframework.net/doc-latest/reference/html/objects.html#objects-variablesource由 spring.net 提供,甚至实现您自己的IVariableSource.

Spring.NET 提供开箱即用的VariablePlaceholderConfigurer从标准 .NET 设置中检索变量,例如AppSettings, ConnectionStrings, UserSettings and ApplicationSettings。 bbaia 的答案部分说明了这一点,您将在下面找到完整的示例。

“表达式黑客”:调用ConfigurationManager来自 xml 配置

所以,我不建议你使用这个,但这是我过去使用过的技巧,应用于你的配置:

<object object name="myService" type="com.acme.MyService, com.acme">
  <constructor-arg name="Connection" 
                   expression="T(System.Configuration.ConfigurationManager).ConnectionStrings['myConnectionName']" />
</object>

您可以使用相同的方法ConfigurationManager.AppSettings, e.g.:

<object object name="myService" type="com.acme.MyService, com.acme">
  <constructor-arg name="AnotherConstructorArgument" 
                   expression="T(System.Configuration.ConfigurationManager).AppSettings['mySetting']" />
</object>

VariablePlaceholderConfigurer:从 Spring.NET xml 配置引用 .NET 设置

您可以轻松配置VariablePlaceholderConfigurer从标准 .NET 设置中检索变量,例如AppSettings, ConnectionStrings, UserSettings and ApplicationSettings。例如,考虑以下 xml 配置:

<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net" >

  <object type="Spring.Objects.Factory.Config.VariablePlaceholderConfigurer, Spring.Core">
    <property name="VariableSources">
      <list>
        <object type="Spring.Objects.Factory.Config.ConnectionStringsVariableSource, Spring.Core" />
        <object type="Spring.Objects.Factory.Config.ConfigSectionVariableSource, Spring.Core">
          <!-- Sections to read, sepearated by comma (leave out spaces) -->
          <property name="SectionNames"
                    value="appSettings,applicationSettings/q7991262.Properties.Settings,userSettings/q7991262.Properties.Settings" />
        </object>
      </list>
    </property>
  </object>

  <!-- Note that you have to append '.connectionstring' to the key! -->
  <object id="usingConnectionStringsVariableSource" 
          type="q7991262.MyService, q7991262">
    <property name="Connection" 
              value="${myConnectionName.connectionString}" />
  </object>

  <object id="configSectionVariableSource" 
          type="q7991262.MyService, q7991262">
    <property name="Connection" 
              value="${myConnectionNameAppSettings}" />
  </object>

  <object id="userSettingsSection" 
          type="q7991262.MyService, q7991262">
    <property name="Connection" 
              value="${myConectionNameUserSetting}" />
  </object>

  <object id="applicationSetting" 
          type="q7991262.MyService, q7991262">
    <property name="Connection" 
              value="${myConectionNameApplicationSetting}" />
  </object>

</objects>

它从中读取设置app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="q7991262.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="q7991262.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <connectionStrings>
    <add name="myConnectionName" 
         connectionString="From connection string section."/>
  </connectionStrings>

  <appSettings>
    <add key="myConnectionNameAppSettings" 
         value="From app setting section." />
  </appSettings>

  <userSettings>
    <q7991262.Properties.Settings>
      <setting name="myConectionNameUserSetting" serializeAs="String">
        <value>My connection from user settings.</value>
      </setting>
    </q7991262.Properties.Settings>
  </userSettings>

  <applicationSettings>
    <q7991262.Properties.Settings>
      <setting name="myConectionNameApplicationSetting" serializeAs="String">
        <value>My connection from application settings.</value>
      </setting>
    </q7991262.Properties.Settings>
  </applicationSettings>

</configuration>

这些配置取自github 上的这个工作示例 https://github.com/serra/stackoverflow/tree/master/spring-questions/q7991262-accessing-configurationmanager.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Spring.NET xml 配置访问 ConfigurationManager.AppSettings 值 的相关文章

  • C# 转换为小数

    如果有的话 有什么区别 decimal d decimal myDouble decimal d new decimal myDouble decimal d Convert ToDecimal myDouble 没有区别 如果你看一下源码
  • 管理调试和发布连接字符串

    在 NET SQLServer 应用程序中管理调试和发布连接字符串的好方法是什么 我有两个 SQL Server 一个是生产服务器 一个是构建 调试服务器 我需要一种在部署 ASP NET 应用程序时在这两个服务器之间进行切换的方法 目前
  • Couchbase v6.0:更新文档内容而不重置文档过期(TTL)值

    我正在使用 Net Couchbase SDK CouchbaseNetClient Package 创建一个新文档 并在执行此操作时设置该文档的到期值 到期 TTL 值设置正确并且工作正常 问题陈述 创建文档后 我需要更新我使用 N1QL
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 如何打开 Windows 资源管理器窗口并选择特定文件夹

    我有一个 winform 应用程序 这个 winform 应用程序创建了几个文件 我想在我的应用程序中实现 查找目标 功能来显示这些文件 这些文件位于同一文件夹中 看图片 假设我创建了几个文件 C Test 文件夹 该文件夹包含以下文件 C
  • 根据 VS2008 中的构建配置排除整个文件

    我的项目有三种不同的配置 这三种配置不需要将所有文件构建到应用程序中 实际上 我更希望能够从构建中排除这些文件 这将使我的应用程序更加轻量级 我正在寻找的是 if MYCONFIG or if DEBUG声明但用于文件 我已经读到这可以通过
  • 在 .Net 中保持 Powershell 运行空间打开

    我正在尝试从 VB Net 中运行一些 PowerShell 代码 如果您知道的话 C 编码器也可能会有所帮助 代码的第一部分 我需要使用密码连接到 na 控制器 并且需要保持连接打开 我还有其他命令需要通过单击按钮来运行 获取文件 显示文
  • 我可以将 SimpleInjectors 诊断结果写入日志文件吗?

    在调用中使用简单注入器container Verify 在我的配置结束时 并在调试器中获取诊断信息 如中所述文档 http simpleinjector codeplex com wikipage title Diagnostics 我想将
  • 为什么 C# 4.0 中的可选参数需要编译时常量?

    还有一种方法可以使用可选方法参数的运行时值吗 可选参数必须是常量 因为它们是作为属性值写出的 因此 它们继承了属性值所具有的所有限制 无法直接对运行时值进行编码 但是您可以接近以下模式 public void MyApi SomeType
  • 捕获特定的 WebException (550)

    假设我创建并执行一个System Net FtpWebRequest 我可以用catch WebException ex 捕获此请求引发的任何与 Web 相关的异常 但是 如果我有一些逻辑只想在由于以下原因引发异常时执行 550 file
  • 应用服务中的内存利用率是否可​​以提高

    我有一个相当简单的 Web 应用程序在 Azure 的 B1 服务计划中的应用服务计划中运行 该计划提供 1 个 CPU 和 1 75GB RAM CPU 使用率永远不会超过 5 左右 内存使用率永远不会低于 52 我确实停止了计划中唯一运
  • 从 .net 应用程序登录 OpenID 站点

    我一直在考虑编写一个小工具来登录 SO 并定期使用一些主题 当前信息更新我的个人资料信息 例如我最新的博客文章或我需要帮助的问题等 为了让它工作 我需要以某种方式从控制台应用程序登录到SO 是否有一个 Net 库可以简化使用原始 http
  • Lazy 实现和 .NET 泛型

    我正在寻找进行延迟初始化的方法并发现Lazy
  • 如何在 wpf 应用程序的代码隐藏中创建集合视图源

    我有以下代码 public partial class MainWindow Window public MainWindow InitializeComponent var entities new DemoEntities var de
  • 如何关闭 Atom 中的片段?

    我最近开始使用Atom https atom io 我遇到的一个问题是为 Ruby 定义了太多 不明确的代码片段 这使得制表符补全变得更糟 因为有时您会得到一些不相关的代码而不是您想要的名称 我想知道如何关闭 Language Ruby 包
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 在.rdlc报告的底部设置一个文本框

    我在 rdlc 报告中使用 tablix 有一个文本框 其中包含文本 签名 我想将此文本框放置在报告最后一页的底部 就在页脚之前 我已经用谷歌搜索了这个解决方案 但没有找到满意的结果 我的环境是VS2010 framework 4 0 有什
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ

随机推荐

  • 使用绑定时如何使子 NSManagedObjectContext 保持最新状态

    我有一个NSManagedObjectContext设置为有一个NSPrivateQueueConcurrencyType我在我的应用程序中大部分时间都在使用它 除此之外 我还创建了一个子 MOCNSMainQueueConcurrency
  • 用于多个项目的 QML 中继器,无需包装项目

    我想要创建一个看起来像这样的视图 为了简洁起见 我省略了一个专栏 text headr text item1 item2 text item3 item4 item5 item6 并一直尝试使用 GridLayout 来做到这一点 问题是我
  • Rails 4 - simple_form 和从 url 预填充字段

    我正在使用 simple form 我想在表单中预先填充几个字段 在表单的链接中 我将几个值传递给 URL 中的参数 当我尝试将值传递给整数或关联字段时 就会出现麻烦 无论哪种情况 该字段都不会预先填充 下面的示例 前两个字段填充得很好 但
  • std::pow 给出小数指数的错误近似值

    这就是我想要做的事情 double x 1 1402 double pow 1 3 std pow x pow 1 结果是 0 但我期望 0 4465 方程是 1 x 3 1 1402 find x 1 3 是 0 这是整数除法 Try d
  • 当 Ionic 2 中的值发生变化时检索本地存储值

    我正在使用 ionic 2 框架 并且尝试使用本地存储来存储网络状态 this local new Storage LocalStorage this local set status this status 有两个值 强 和 弱 可以动态
  • Nginx 和 FastCGI 下载 PHP 文件而不是处理它们

    我在 Windows 7 64 位 PHP 5 4 12 和 Nginx 1 5 8 上运行 我已经阅读了许多有关设置和解决此问题的教程 即当从本地主机请求 PHP 文件时 它将其作为文件下载 而不是显示 PHP 页面 下面是我的 ngin
  • 按日期顺序全局搜索文件?

    我的 python 脚本中有这行代码 它在特定目录中的所有文件中搜索 cycle log for searchedfile in glob glob cycle log 这工作得很好 但是当我将脚本运行到网络位置时 它不会按顺序搜索它们 而
  • 水晶报表自定义纸张尺寸?

    我需要水晶报告中的自定义纸张尺寸 例如宽度 5 英寸和高度 7 英寸 是否可以 IIRC 您在打印机上设置自定义纸张尺寸 然后当您在设计时在报告中设置打印机时 Crystal 会拉出自定义尺寸
  • 通过 Kafka 报告 (prometheus) 指标

    我正在寻找一种将 Prometheus 与应用程序解耦的方法 通过在中间放置 Kafka 来实现如下目标 Application metrics gt Kafka gt Prometheus 为了解决这个问题我有两个问题 是否有任何 Jav
  • Firestore社交网络数据结构

    如何构建社交网络数据库结构 例如twitter我们可以在我们的时间线中关注用户并获取他们的所有推文 我已经检查过了Firestore 如何构建 feed 和 follow 系统 https stackoverflow com questio
  • 检查序言列表元素的关系

    可以说我有关系 Happy james Happy harry unhappy Tom unhappy Ben unhappy Dick 然后是人员名单 Ben James Harry Tom Dick 如何迭代列表并检查每个列表元素的布尔
  • Jetpack Compose 记住的实际功能是什么?它在幕后是如何工作的?

    查看 Codelab 的基本教程 其中有一个片段可以在单击时增加按钮上的计数器 Composable fun MyScreenContent names List
  • 手动调用 MVC 3 客户端验证以进行 ajax 帖子

    我正在创建一个 MVC 3 Web 应用程序 我想在实体类上使用数据注释 然后在回发到服务器之前使用不显眼的客户端验证 这在发常规帖子时效果很好 如果任何字段无效 我会收到验证和验证摘要 但是 我想通过ajax和json回发信息 我如何首先
  • 如何在Scala中编写极限函数?

    在想知道我的第一个 Scala 应用程序中的某些错误后 我发现我的 limit 函数根本不起作用 所以这是我的第一次尝试 def limit x Double min Double max Double if x lt min min if
  • 使用 XLIFF 改进 Android 字符串资源

    我见过一些使用 XLIFF 标签来包装变量的 Google 应用程序和代码示例 我看到这样做有一些很大的优势 特别是对于替换非描述性格式参数 例如 1 s 不幸的是 XLIFF 似乎并没有很好地集成到 ADT 中 以以下字符串资源为例
  • 通过 Python Socket 向 Maya 发送多行命令

    我想知道有没有办法通过python套接字和Maya自己的 commandPort 命令向maya发送多行命令 我使用下面的代码将代码发送到 Maya message 值是命令 import socket HOST 192 168 1 122
  • 在指定目录启动 JFileChooser 并仅显示特定类型的文件

    我有一个使用 JFileChooser 的程序 简而言之 完整的程序是一个 GUI 允许用户操作 PNG 和 JPG 我想让 JFileChooser 立即打开图片目录 Windows 当用户打开 JFileChooser 时 它将直接打开
  • 如何让函数在 python 中返回图形(使用 matplotlib)?

    假设我有一些数据 并且我想通过将其传递给自定义绘图函数 myplot 来创建该数据的绘图 我在 myplot 中使用 matplotlib 的模块 我希望 myplot 返回图形的句柄 并且在调用此函数时不显示绘图 以下是 iPython
  • SQL Server - 创建针对数据库中所有表运行的单个触发器

    我试图在 SQL Server 2005 中创建一个在 INSERT UPDATE 和 DELETE 上运行的触发器 但针对数据库中的所有表 用于审计目的 是否有可能做到这一点 目前 我们为数据库中的每个表都有单独的触发器 并且由于它们都执
  • 从 Spring.NET xml 配置访问 ConfigurationManager.AppSettings 值

    我有一个要求 要求我使用 Spring net 获取存储在 app config 中的连接字符串 然后将检索到的连接字符串注入到实例化对象中 我如何使用 Spring net 的 xml 配置来做到这一点 例如 我的代码不这样做 Sprin