我正在使用 StackExchange.Redis 从.NET Core连接到Redis服务器。如何将单例IConnectionMultiplexer
注入另一个单例服务?
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(...)
调用的返回值并重复使用。因此,我为此创建了单例服务(它基于另一个StackOverFlow question),但是我并没有运气将其注入另一个SINGLETON服务MyService
。
答案 0 :(得分:2)
注册服务时,您可以将工厂委托重载用于AddSingleton
public void ConfigureServices(IServiceCollection services) {
//...
services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect(GetRedisConnectionString()));
services.AddSingleton<IMyService>(serviceProvider =>
new MyService(new DbContext(optionsBuilder.Options), serviceProvider.GetRequiredService<IConnectionMultiplexer>())
);
//...
}
委托人传入IServiceProvider
,可用于解析所需的服务。