瞬态与每个webrequest生活方式,什么构成网络请求?

时间:2014-03-22 07:42:54

标签: ninject castle-windsor autofac

这两个生命周期之间有什么区别?

让我们说我的MVC控制器提供了一个配置为瞬态的对象,然后当有人访问该控制器中的方法时,在类构造函数中注入一个新实例,然后调用该方法。 / p>

每次获取/发送到控制器都是一个新请求,对吧?如果是这样,那么我不会发现两者之间存在任何差异。

有人可以解释/提供一个何时使用一个与另一个相比的例子?

2 个答案:

答案 0 :(得分:6)

Transient Web Request 之间的区别在将Controller类型注册为 Transient 时可以忽略不计,因为 - 如你所说 - 每个请求都有自己的Controller,并且该请求中只解析了该类型的一个控制器实例。

Controller对象图中存在依赖于多个组件的依赖时,事情开始变得有趣。可能发生这种情况的一个很好的例子是使用Unit of Work(例如实体框架' s DbContext)。对象图中的多个服务可能需要相同的工作单元,并且为了应用程序的正确性,它们在该请求期间都需要相同的实例;但每个请求必须获得一个新的工作单元实例。

要了解有关何时何时没有每个请求的更多信息,请阅读以下内容: One DbContext per web request… why?

答案 1 :(得分:2)

如果无法区分不知道的情况,则无法对DI工具进行错误处理。 PerWebRequest范围是一个范围,从网络摄像头的开始到网络摄像头的结束。只要你持有对已解析实体的引用(通常是调用者的生命周期),就会有短暂的生命。

当然,如果解析实体与请求具有相同的生命周期,您将看不到任何差异。 PerWebRequest生命周期从请求的开始到结束。瞬态寿命根据其上的参考而存在;如果您需要完全依赖于当前webrequest的某些日志记录,则可以设置PerWebRequest生命周期。处理请求的控制器将获得Transient生命周期,因为它的工作已经完成,不再需要了