Spring.Net IoC 应用上下文

发布于 2024-07-11 16:47:04 字数 768 浏览 11 评论 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");

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

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

I'm having the following "problem".
I created a application context file for spring.net.
The configuration looks like this:

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

I was told that if you change something to the application context you don't need to recompile your application to see the changes.

How ever if I change something to the configuration file. No changes are seen. It is still the original data that is visible.

I call the application context like this:

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

Sometimes it takes a while for the changes to be visible (even after recompiling the app).

EDIT:
I just found out that you have to restart your application pool.
I'll just rephrase my question then: "Can you reload the application context within you application?"
Without having to restart the application pool.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁对谁错谁最难过 2024-07-18 16:47:04

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

您可以以编程方式使用 ContextRegistry 方法(Clear,然后 RegisterContext)来重新加载ApplicationContext,尽管我不推荐它。

The application pool doesn't have to be restarted, the AppDomain related to your executing code has to be recycled. I don't know if this is an option for you, but if you put the spring objects inside the web.config file instead of in a separate file, and you change the web.config file (by for instance changing the spring configuration inside it), the AppDomain associated will be recycled, which should also mean that your application gets reconfigured again. You could also just change your SpringObjects.config file and 'touch' the web.config after that. (I'm not sure if putting the SpringObjects.config in the bin directory is a good idea, but a change to the bin dir also causes a AppDomain recycle)

You could use the ContextRegistry methods (Clear, and then RegisterContext) programmatically to reload the ApplicationContext, although I would not recommend it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文