【问题标题】:Castle Windsor Component Lifestyle adviceCastle Windsor 组件 生活方式建议
【发布时间】:2012-02-13 14:25:40
【问题描述】:

我正在寻找一些关于如何最好地配置这种情况的建议。我在 ASP MVC 应用程序中有以下组件。

  • 控制器 - 按 MVC 要求瞬态
  • 服务 - 控制器调用这些以进入业务层
  • 验证器 - 服务使用这些验证组件。这些创建起来很昂贵,所以我需要它们是单例的
  • 存储库 - 服务和验证器使用这些来访问数据
  • ISession - NHibernate Session 配置为 PerWebRequest

我正在研究如何最好地配置服务和存储库。从表面上看,它们似乎都可以配置相同。存储库唯一的依赖项(在构造函数中传递)是 ISession。仅服务依赖项(在构造函数中传递)是存储库。当服务需要验证器时,它会从 ServiceLocator 获取它。验证器在构造函数中获取存储库。我认为因为 Validator 是 Singleton 传递 Transient Repositories 是有问题的,因为 Validator 将持有一个具有已处置 ISession 的 Repository。

我们将不胜感激。

【问题讨论】:

    标签: inversion-of-control castle-windsor


    【解决方案1】:

    任何依赖于 UnitOfWork(ORM, custom implementation...) 的存储库都必须是临时的或至少是相同的 UoW 生活方式。

    如果您的 Validator 需要通过 Repository 对存储进行“只读”访问...您可以考虑拥有一个 Singleton Repository,但在实施时要非常小心

    【讨论】:

      【解决方案2】:
      • 会话 PerWebRequest
      • 依赖于使用 ISessionProvider(可能是单例)的存储库,如果它们被注入会话,则它们将绑定到会话的生命周期,因此 PerWebRequest
      • 验证器:创建成本高????好的,如果他们需要 repo 或 session 与 repos 本身一样在这里适用
      • 服务:可能也可以是每个网络请求

      【讨论】:

        猜你喜欢
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多