【问题标题】:Retrieve config file path an object is configured in in Spring.NET检索在 Spring.NET 中配置对象的配置文件路径
【发布时间】:2011-05-22 20:27:26
【问题描述】:

我想在 Spring.NET 中配置一个能够读取其他配置文件的对象。这些文件应该相对于 Spring.NET 配置文件(或 app.config,如果 Spring.NET 配置在那里)。

所以我需要一种方法来找出我的对象的对象定义来自哪个配置文件。或者如果没有配置文件(因为它是通过编程方式配置的)。

如果没有通用的解决方案(恐怕没有……)专门针对 XmlApplicationContext 的解决方案也可以。

到目前为止,我尝试的是从 IApplicationContextAware 派生,然后将应用程序上下文转换为 XmlApplicationContext。这包含属性 ConfigurationLocations。 但这不起作用,因为 ConfigurationLocations

  • 受到保护,因此无法访问
  • 是一组文件,所以如果有多个文件,我不知道我的对象来自哪个文件
  • 特定于 XmlApplicationContext(如前所述:好的但不是最佳的)
  • 我敢肯定,如果 config 在 app.config 中,这将不起作用。

我的问题有什么解决办法吗?

【问题讨论】:

  • 您能解释一下为什么需要阅读这些配置文件吗?也许有其他解决方案。
  • 我只能想到黑客......我会将文件名放在外部对象的 DI 配置中,这是 IMO 最干净的解决方案。

标签: c# spring.net


【解决方案1】:

我可以确认,一旦注册,就无法将针对上下文定义的特定对象的 ObjectDefinition 与该 ObjectDefinition 的特定“源”关联起来。

Context 的底层 ObjectFactory 的设计特别是它不需要知道/关心 ObjectDefinition 元数据的来源,而是在初始化 ObjectFactory 时将所有元数据合并在一起。

无论如何,我都会注意“跟踪”配置文件的路径 b/c 虽然这可能适用于您的特定用例,但它不太可能是解决问题 b/ 的良好通用解决方案c Spring.NET 配置文件设计的一个重要原则是一个配置文件可以“导入”一个或多个其他配置文件,而这些配置文件又可以导入一个或多个其他配置文件,等等,因此只知道其中一个的完整路径相互依赖的配置文件不会(必然)与包含您正在寻找的特定对象的元数据的实际配置文件的路径有任何关系。

同样,如果您完全控制配置文件的格式/内容,那么您的解决方法可能是可行的,但请注意,它可能不是一个好的通用解决方案。

【讨论】:

  • 如果您的“包装器”继承自 XMLApplicationContext,您将可以访问...但我不确定这是否是可行的方法。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2021-04-12
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多