我使用StackExchange.Redis从.NET核心连接到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
建议(链接)保存ConnectionMultiplexer.Connect(...)
调用的返回值并重用它。因此,我为它创建了可以注入的单例服务(它基于另一个StackOverFlow问题),但是我没有运气将它注入到另一个单例服务MyService
。
发布于 2019-06-07 11:08:42
在注册服务时,可以为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
。
https://stackoverflow.com/questions/56493071
复制相似问题