gpt4 book ai didi

c# - .NET Core 在另一个单例服务中注入(inject)单例服务

转载 作者:可可西里 更新时间:2023-11-01 11:12:22 26 4
gpt4 key购买 nike

我正在使用 StackExchange.Redis 从 .NET Core 连接到 Redis 服务器。如何将单例 IConnectionMultiplexer 注入(inject)另一个单例服务?

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect(GetRedisConnectionString()));
services.AddSingleton<IMyService>(new MyService(new DbContext(optionsBuilder.Options)), ???);
...
}

MyService.cs

private DbContext _dbContext;
private IConnectionMultiplexer _redis;

public MyService(DbContext dbContext, IConnectionMultiplexer redis)
{
_dbContext = fitDBContext;
_redis = redis;
}

我需要在 ConfigureServices 中放置什么而不是 ????还有其他方法吗?

StackExchange.Redis 建议 ( link ) 我们保存 ConnectionMultiplexer.Connect(...) 调用的返回值并重新使用它。因此,我为它创建了可以注入(inject)的单例服务(它基于另一个 StackOverFlow question ),但是我没有运气将它注入(inject)另一个单例服务 MyService

最佳答案

您可以在注册服务时为 AddSingleton 使用工厂委托(delegate)重载

public void ConfigureServices(IServiceCollection services) {

//...

services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect(GetRedisConnectionString()));
services.AddSingleton<IMyService>(serviceProvider =>
new MyService(new DbContext(optionsBuilder.Options), serviceProvider.GetRequiredService<IConnectionMultiplexer>())
);

//...
}

委托(delegate)传入一个IServiceProvider,可用于解析所需的服务。

关于c# - .NET Core 在另一个单例服务中注入(inject)单例服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56493071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com