【问题标题】:Windsor PerWebRequest resolution in Application_StartApplication_Start 中的 Windsor PerWebRequest 解析
【发布时间】:2011-03-02 16:10:48
【问题描述】:

我将 HttpContextBase 注入到缓存类中。 HttpContextBase 注册为 PerWebRequest。我在每个 Web 请求上与缓存类进行交互,这工作正常,但我还需要在应用程序启动时初始化缓存。

我知道 PerWebRequest 在 Application_Start 中不起作用:

castle PerRequestLifestyle not recognize

在我的情况下解决此问题的最佳方法是什么?

【问题讨论】:

    标签: castle-windsor perwebrequest


    【解决方案1】:

    不要使用依赖于网络请求之外的每个网络请求的东西。

    如果您需要依赖您注册为 PWR 的类,我建议您为该服务获取另一个具有不同生活方式的组件,并在 Application_Start 中使用它,并在 Web 请求中使用 IHandlerSelector 返回 PWR 一个, 另一个则不然

    【讨论】:

    • 想在应用启动时预填充缓存并不是没有道理的,那么如果我想使用 Windsor 来解析依赖于 HttpContextBase 的缓存类,我有什么选择呢?
    • 如何在 Web 请求之外使用 HttpContextBase?
    • Application_Start 事件中还有一个 HttpContext
    • workaround 更新了答案。我仍然会尝试重构您的代码,使其不依赖于您选择绑定到 Web 请求之外的 Web 请求的内容。
    • +1 Krzysztof 的解决方法是正确的。为 Application_Start() 使用瞬态
    【解决方案2】:

    【讨论】:

    • 虽然我还是要说 - 重构应该是你的第一选择
    • @mauricio-scheffer 我有点困惑,假设我在我的 applicaiton_start 中使用混合 webrequest 注册了 IDBcontext,现在当应用程序启动时没有 httpcontext,所以它将被注册为 tansient。那么 IDBcontext 将如何被注册为 perrequest 生活方式呢?
    • @Arvand 如果存在 HttpContext ,容器将尝试从上下文中解析它。否则它将创建一个新实例。
    【解决方案3】:

    为了在容器启动时预热缓存,我通常使用 Startable Facility。 下面是一个关于如何使用它的例子: http://blog.bittercoder.com/PermaLink,guid,a621ddda-acb5-4afd-84ff-faafb96a2fa1.aspx

    【讨论】:

    • 它仍然会急切地实例化服务
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2012-07-31
    • 2016-02-26
    相关资源
    最近更新 更多