使用Castle Windsor的存储库类的适当生命周期

Dav*_*vid 2 lifecycle castle-windsor unit-of-work repository-pattern

当我开始使用温莎时,我认为DI很简单.现在它让我越来越困惑.

作为具有单例生命周期的类,存储库让我感到震惊.在应用程序的生命周期中,我应该有一个FooRepository实例来加载和保存Foos到数据库.

但是,每个存储库都包含对UnitOfWork的引用,它执行脏检查,与数据库等一起工作.UnitOfWork具有PerWebRequest的生命周期 - 对于UnitOfWork来说单独存在没有任何意义,因为单例实例可以(例如)同时刷新多个用户会话所做的更改.

那么我有一个单例FooRepository,它持有对UnitOfWork的引用,在会话结束时会被处理掉!我甚至不确定会对存储库的行为产生什么影响,但听起来不太好.

任何人都可以用简单的英语(好吧,可能有一些代码)来解释在Web应用程序中管理Repository和UnitOfWork类的生命周期的适当方法吗?

Krz*_*mic 5

经验法则是 - 组件不应该依赖于比它更长的其他组件.

换句话说,瞬态依赖于单例或每个Web请求组件是可以的,但不是相反.

我接近Repository的方式 - UoW场景是我的UoW是每个Web请求,但是存储库是无状态和瞬态的.

  • 哦,建议编辑 - '组件不应该依赖于它将会活得更长的其他组件'.但我知道你的意思,谢谢! (2认同)