【问题标题】:Setting AWS Services Lifetime in .NET Core在 .NET Core 中设置 AWS 服务生命周期
【发布时间】: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


【解决方案1】:

来自 AWS 开发工具包的开发人员,我建议将其保留为默认值。添加到集合中的 AWS 服务客户端是线程安全的。我们添加了重载来设置服务生命周期,以便在有人做一些非常不寻常的事情时提供灵活性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2023-01-22
    • 1970-01-01
    • 2023-03-11
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多