c# - .NET Core 在另一个单例服务中注入单例服务
问题描述
我正在使用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)), ???);
...
}
我的服务.cs
private DbContext _dbContext;
private IConnectionMultiplexer _redis;
public MyService(DbContext dbContext, IConnectionMultiplexer redis)
{
_dbContext = fitDBContext;
_redis = redis;
}
我需要放什么而不是???
in ConfigureServices
?还有其他方法吗?
StackExchange.Redis
建议(链接)我们保存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
可用于解析所需服务的参数。
推荐阅读
- android - Android Studio 请求应用程序权限不会编译
- python - Matplotlib 条形图图例仅显示一项
- mysql - 在下拉列表中显示 Category subCategory 和 sub-subCategory
- python - 我有两个不同维度的熊猫数据框,我想创建一个结合两者的新数据框
- postgresql - 如何设置表默认 autovacuum_analyze_threshold
- python - 如何在 django 序列化程序中进行验证?
- java - 如何定义到 InfluxDB 的 Apache Camel 路由
- java - 如何更新 Dynamo DB 中保留关键字的值。错误:属性名称是保留关键字;保留关键字:数据
- android - 在限制线之间绘制背景颜色
- c# - 如何在多个线程中正确锁定对列表的访问