2011-05-21 111 views
1

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

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

如果没有通用的解决方案(恐怕没有一个...),那么专门针对XmlApplicationContext的解决方案也可以。

我到现在为止的尝试是从IApplicationContextAware派生,然后将应用上下文转换为XmlApplicationContext。这包含属性ConfigurationLocations。 但是,这并不因为ConfigurationLocations工作

  • 被保护,因此无法访问
  • 是文件的数组所以如果有一个以上的文件,我不知道从哪个我物体进入
  • 具体
  • 到XmlApplicationContext(如说:好吧,但不是最佳)
  • 我敢肯定,如果配置是在app.config内,这将无法正常工作。

有没有解决我的问题?

+0

你能否解释为什么你需要阅读这些配置文件?也许有另一种解决方案。 – Marijn 2011-05-21 11:48:44

+0

我只能想到黑客......我会把文件名放在外部对象的DI配置中,这是最干净的解决方案IMO。 – Marijn 2011-05-22 12:39:27

回答

1

我可以确认,无法将为Context定义的特定对象的ObjectDefinition与Ob​​jectDefinition的特定“源”注册后关联起来。

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

虽然这可能适用于您的具体使用情况,但我会留意有关“保持跟踪”配置文件路径的信息,它不太可能成为问题的良好通用解决方案b/c Spring.NET配置文件设计的一个重要原则是一个配置文件可以“导入”一个或多个其他配置文件,这些配置文件又可以导入一个或多个其他配置文件等,并且知道完整路径这些相互依赖的配置文件将不会(必然)与包含您正在寻找的特定对象的元数据的实际配置文件的路径有任何关系。同样,如果你完全控制了配置文件的格式/内容,那么你的解决方法可能是可行的,但要注意它可能不是一个好的通用解决方案。

+0

如果您的“包装器”从“XMLApplicationContext”继承而来,您将有权访问......但我不确定是否需要这样做。 – Marijn 2011-05-23 13:24:54