当前位置: 首页 > 面试题库 >

在.NET Core依赖注入中,StackExchange.Redis.ConnectionMultiplexer应该是AddStatic还是AddScope?

顾靖
2023-03-14
问题内容

我正在使用将..NET Core添加到Redis连接StackExchange.Redis,它当前看起来像这样:

public static IServiceCollection AddRedisMultiplexer(
    this IServiceCollection services,
    Func<ConfigurationOptions> getOptions = null)
{
    // Get the options or assume localhost, as these will be set in Startup.ConfigureServices assume they won't change
    var options = getOptions?.Invoke() ?? ConfigurationOptions.Parse("localhost");

    // The Redis is a singleton, shared as much as possible.
    return services.AddSingleton<IConnectionMultiplexer>(provider => ConnectionMultiplexer.Connect(options));
}

然后在 Startup

public void ConfigureServices(IServiceCollection services)
{
    services.AddRedisMultiplexer(() => 
        ConfigurationOptions.Parse(Configuration["ConnectionStrings:Redis"]));
    ...

这意味着我可以IConnectionMultiplexer在任何地方进行依赖注入。

我的问题是:ConnectionMultiplexer是可以重复使用,所以我用AddSingleton,以保持一个实例整个应用程序。但是我也可以AddScoped在请求期间使用一个。哪个更好?为什么?


问题答案:

该应用程序的预期负载是多少?如果您有很多并发性,我认为使用AddScoped将意味着为每个请求启动和关闭连接的大量不必要的负担。

同样,恕我直言,这些观察结果表明您应该使用 AddSingleton

(…)很少会短暂使用ConnectionMultiplexer,因为这种想法是要重用此对象。

Redis的另一个常见用途是作为发布/订阅消息分发工具。这也很简单,并且
在连接失败的情况下,ConnectionMultiplexer将处理重新订阅所请求通道的所有详细信息。

此外,您将节省仅具有ConnectionMultiplexer(IMHO)实例的内存。



 类似资料:
  • 在angular2中,假设我有一个类和一个类,它们具有相同的属性/成员和方法。如何初始化类? 服务 其中一个子类要扩展类:

  • 问题内容: 已经发布了几个问题,其中包括有关依赖项注入的特定问题,例如何时使用它以及支持它的框架。然而, 什么是依赖项注入?何时/为什么/不应该使用它? 问题答案: 依赖注入 将依赖传递给其他 对象 或 框架 (依赖注入器)。 依赖注入使测试更加容易。注入可以通过 构造函数 完成。 其构造函数如下: 问题 :如果涉及复杂的任务,例如磁盘访问或网络访问,则 很难 对其进行单元测试。程序员必须进行模拟

  • 问题内容: 我目前使用nodejs创建一些实验项目。我已经用Spring编写了很多Java EE Web应用程序,并赞赏那里的依赖注入的简易性。 现在我很好奇:如何使用节点进行依赖注入?或者:我什至需要吗?是否存在替代概念,因为编程风格不同? 到目前为止,我在谈论简单的事情,例如共享数据库连接对象,但是我还没有找到一个令我满意的解决方案。 问题答案: 简而言之,您不需要像C#/ Java中那样的依

  • 考虑下面的代码: 上面的代码是一个表示一个汉堡包类。 该类假设汉堡包括Bun, Patty 和 Toppings。 该类还负责制作Bun, Patty 和 Toppings。 这是一件坏事。 如果需要素食汉堡怎么办? 一个天真的方法可能是: 好吧,这有点不同,它在某些方面更灵活,但它仍然相当脆弱。 如果Patty构造函数改变以允许新的功能会发生什么? 整个汉堡包类必须更新。 事实上,任何时候任何这

  • 我有两门课和。规则如下: 每个作业都有一个数字标识符。 每个作业有10个对应的任务。 每个任务都有一个数字标识符。 一个没有就不能存在。 我试图建立这两个类的类图。因为任务不能没有作业,所以我认为这是一个组合,这就是我如何构建类图: 但现在我感到困惑的是,如果这种关联实际上是依赖关系: 在这种情况下,我如何知道关系是组合关系还是依赖关系? 我已经按照Thomas Kilian的建议在类图中修复了组

  • 我一直在尝试将< code>webdriver注入到步骤中。我已经使用了这个说明,效果很好。 想法是将WebDriver作为服务注入到steps类中。在初始步骤,您需要添加以下依赖项。 依赖关系注入涉及三个主要类。在这里,我们逐一介绍它们。 BaseUtil BaseUtil是具有WebDriverof Selenium属性的类。这个类非常简单: 钩 钩子类包含之前和之后的