为什么我不能让我的服务单身(ioc)?

jga*_*fin 7 .net inversion-of-control

重要提示:请注意,我并不是指具有私有构造函数和静态实例变量(或者有人建议使用静态类)的单例,而是单例在应用程序生命周期中从控件容器的反转中返回相同的实例.

许多容器默认使用较短的使用寿命.每个依赖项(或每个请求)的新实例或每个范围的实例(例如HTTP请求).

我想知道为什么容器促进短寿命的物体而不是长寿?

请注意,我通常只在容器中注册我的服务.如果我需要创建域模型等,我在容器中注册工厂.

jga*_*fin 2

做了更多研究。

因为使用较短的生命周期更容易处理会话特定信息。混合生命周期也会使事情变得复杂。

每次您在单实例服务中获取范围依赖项时,它都会在启动时正常工作。然而,范围服务通常不是为了长期存在而设计的。如果他们使用套接字连接或数据库连接等外部资源,它可能会在某一时刻丢失。

由于作用域服务不是为此设计的,因此它可能会开始失败,因此单实例服务也将开始失败并继续这样做,直到应用程序重新启动。