cfb*_*ero 3 castle-windsor asp.net-mvc-3
我想知道Castle Windsor组件依赖生活方式的最佳实践是什么.例如,如果我有一个依赖于ISession的Repository类.如果将存储库设置为PerWebRequest,但将ISession设置为瞬态,那么这会对windsor释放组件造成任何问题,以便GC可以正确清理吗?
从逻辑上讲,它似乎可以工作,因为在webrequest期间对存储库的每个请求都将获得对同一实例的引用.该实例将保留对单个ISession的引用,该ISession在首次请求时实例化以满足Repo依赖性.由于PerWebRequest跟踪,Windsor将知道Repo何时超出范围,因此应该知道何时清理ISession.
然而,这个职位由克日什托夫·Koźmic意味着你不应该依赖于一些与比自己更短的生活方式的组成部分.
[编辑]
我的问题是,让温莎组件依赖于比自身更短的生活方式(即PerWebRequest组件 - >瞬态组件)是否可以接受?
是的,它可以完全没问题,特别是在情况下something --> transient.你需要担心的事情是:
如果您已经考虑了这两个因素,并且可能还有其他一些特定于您的场景的因素,那么您就可以做出明智的选择,继续使用依赖关系.
或者,您可以通过一个间接层使其成为传递依赖:
singleton -(depends on)-> singleton factory -(resolves)-> per-web-request component.
单例对象可能依赖于它用来拉动(例如)用于执行其工作的每个Web请求对象的工厂.有了它,如果实施得当,它将没有上面讨论的缺点.
希望有所帮助.
哦,我的另一个答案,你在你的问题中联系到 - 它说的是经验法则,而不是严格的法律.在大多数情况下,它可能是正确的,但是,如上所述,如果你知道自己在做什么,就可以打破它.这也是为什么Windsor用于检测这些情况的诊断被称为可能错误配置的组件的原因
| 归档时间: |
|
| 查看次数: |
1158 次 |
| 最近记录: |