尝试了解哪种服务生命周期最适合服务层瞬态或范围(为什么)。我正在寻找使用范围作为服务层而不是瞬态的优点和缺点。瞬态服务是否可以与数据库事务配合良好,或者将服务层保留在范围内并不是一件好事。谢谢
通常,您应该默认为瞬态生命周期。这些很容易理解,并且通常会阻止您在服务中保留状态。它\xe2\x80\x99s 也是与其他服务最兼容的生命周期,因为它可以在任何地方使用。所以除非你有一定的要求,否则默认选择transient即可。
\n\n当您有昂贵的操作或应在请求期间保留的临时状态时,范围服务是很好的选择。数据库连接就是一个很好的例子,因为数据库连接并不是超级便宜,并且使用单个连接来处理单个用户的单个请求(这不是同时发生的)效果很好。其他示例将在请求数据之上进行计算,例如从有关用户的外部源检索的数据(尽管在这里您甚至可能会考虑寿命更长的缓存)。
\n\n如果您不是自己创建数据库连接,则很可能您已经拥有一些服务,您需要通过这些服务才能使用数据库。希望该服务已注册为范围服务。Entity Framework Core 中的一个示例是DbContext默认情况下将注册为范围依赖项。
如果您使用此类服务,则可以从临时服务中使用它们。多个(暂时的)服务最终将接收同一个实例。但是,\xe2\x80\x99 是你的服务不应该关心的实现细节。因此,默认建议仍然有效:将服务注册为瞬态服务。
\n\n在决定瞬态还是作用域时,考虑以下问题也是一个好主意:在处理单个请求期间服务是否会多次解析?每次创建单独的实例是否存在问题(例如,这是一个昂贵的操作)?那么选择一个有范围的生命周期可能会对您有所帮助。
\n| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |