【发布时间】:2019-07-03 14:03:12
【问题描述】:
在 .NET Core 中将 AWS 服务添加到服务集合时,我应该使用默认添加为单例,还是应该使用覆盖设置为瞬态?
作为参考,显示 DynamoDB 的默认选项(Singleton)和 SQS 的 Transient:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddHttpContextAccessor();
// Add AWS Services
services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAWSService<IAmazonDynamoDB>();
services.AddAWSService<IAmazonSQS>(lifetime: ServiceLifetime.Transient);
}
我已经看到很多使用默认值的例子,但是阅读这篇文章建议使用 Transient,除非有理由使用 Singleton: https://dotnetcoretutorials.com/2017/03/25/net-core-dependency-injection-lifetimes-explained/#comments
【问题讨论】:
-
如果我们不确定生命周期应该是多少,Transient 更安全,因为我们不会搞砸。您链接的文章更笼统,与 AWS 无关。就 AWS 而言,他们知道自己的内部结构是什么,因此他们知道哪个更有意义。这意味着他们设计的课程以这种方式运作良好。没有 100% 的保证,但除非有已知的原因,否则我会倾向于默认设置。例如,如果其中一个类使用
HttpClient,并且它们的默认生命周期阻止它被错误地创建和处置,该怎么办?
标签: c# asp.net-core .net-core aws-sdk-net