城堡温莎组件生活方式的建议

时间:2012-02-13 14:25:40

标签: inversion-of-control castle-windsor

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

  • 控制器 - 根据MVC的要求而短暂
  • 服务 - 控制器调用这些来访问业务层
  • 验证程序 - 服务使用这些验证组件。这些都很昂贵,所以我需要它们成为Singleton
  • 存储库 - 服务和验证器使用这些来访问数据
  • ISession - 配置为PerWebRequest的NHibernate会话

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

依赖于UnitOfWork(ORM,自定义实现......)的任何存储库必须是瞬态的或至少与UoW生活方式相同。

如果您的Validator需要通过Repository对存储进行“只读”访问...您可以考虑使用Singleton存储库,但要非常小心其实现

答案 1 :(得分:0)

  • Session PerWebRequest
  • 存储库取决于使用ISessionProvider(可能是单例),如果它们被注入会话,它们将被绑定到会话的生命周期,因此PerWebRequest
  • 验证者:创建昂贵????好的,如果他们需要回购或会话同样适用于回购本身
  • 服务:也可以按网络请求