我在用StackExchange.Redis从 .NET Core 连接到 Redis 服务器。如何注入单例IConnectionMultiplexer
到另一个单例服务?
启动.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;
}
我需要放什么来代替???
in ConfigureServices
?还有其他方法吗?
StackExchange.Redis
建议(link)我们保存返回值ConnectionMultiplexer.Connect(...)
调用并重用它。因此,我为它创建了单例服务(它基于另一个StackOverFlow 问题)可以注入,但我没有运气将它注入到另一个 SINGLETON 服务中MyService
.
您可以使用工厂委托重载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
可用于解决所需的服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)