0

我有以下“问题”。我为 spring.net 创建了一个应用程序上下文文件。配置如下所示:

<spring>
    <context>
        <resource uri="config://spring/objects"/>
    </context>
    <objects configSource="SpringObjects.config" />
</spring>

有人告诉我,如果您对应用程序上下文进行更改,则无需重新编译应用程序即可查看更改。

如果我对配置文件进行一些更改。没有看到任何变化。它仍然是可见的原始数据。

我这样称呼应用程序上下文:

IApplicationContext ctx = ContextRegistry.GetContext();
    ManagementConfigurator configurator = (ManagementConfigurator)ctx.GetObject("ManagementConfigurator");

有时需要一段时间才能看到更改(即使在重新编译应用程序之后)。

编辑:我刚刚发现您必须重新启动应用程序池。然后我将重新表述我的问题:“你能在你的应用程序中重新加载应用程序上下文吗?” 无需重新启动应用程序池。

4

1 回答 1

2

应用程序池不必重新启动,与您执行代码相关的 AppDomain 必须回收。我不知道这是否适合您,但是如果您将弹簧对象放在 web.config 文件中而不是单独的文件中,然后更改 web.config 文件(例如通过更改内部的弹簧配置它),关联的 AppDomain 将被回收,这也意味着您的应用程序将再次重新配置。您也可以只更改您的 SpringObjects.config 文件并在此之后“触摸”web.config。(我不确定将 SpringObjects.config 放在 bin 目录中是否是一个好主意,但是对 bin 目录的更改也会导致 AppDomain 回收)

您可以以编程方式使用 ContextRegistry 方法(Clear,然后是 RegisterContext)来重新加载 ApplicationContext,尽管我不建议这样做。

于 2009-01-09T19:21:17.327 回答