重要提示:请注意,我不是指私人构造函数和静态实例变量(或者有人建议使用静态类)的单例,而是单例在应用程序期间从控件容器的反转中返回相同的实例寿命。
许多容器默认使用较短的使用寿命。每个依赖项(或每个请求)的新实例或每个范围的实例(例如HTTP请求)。
我想知道为什么容器会促进短寿命物品而不是长寿?
请注意,我通常只在容器中注册我的服务。如果我需要创建域模型等,我在容器中注册工厂。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果在很大程度上取决于您的服务是做什么的。通常,如果存在某种共享状态,您会选择单例,因此围绕该状态的同步可能会导致瓶颈,从而影响可伸缩性。如果没有共享状态,那么你仍然可以选择单例,但是你必须要小心,你不会在将来某个时候引入任何共享状态(或者如果你这样做,你就可以有效地锁定它)。
如果您每次都返回一个新的服务实例,那么您不必担心这一点,并且它可能会在将来导致更好的可扩展性/灵活性,尽管返回一个新实例也可能影响可扩展性,如果该实例持有稀缺资源(例如数据库连接)。
所以,我认为真正的答案是“它取决于”。如果你看看框架如何处理它通常是一些中间解决方案,例如维护服务池(例如数据库连接池)或Wcf的“每会话”模型。