【发布时间】:2019-10-22 21:17:50
【问题描述】:
我正在使用 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),但是我没有运气将它注入到另一个单例服务MyService。
【问题讨论】:
-
使用工厂委托
-
@Nkosi 你能举个例子吗?
-
您将遇到将 dbcontext 作为
IMyService的单例的问题!请看这篇帖子stackoverflow.com/questions/48767910/… -
@Mark alsami 在他们关于在单例中使用 DbContext 的观察中是正确的。那里有潜在的问题。您是否考虑过使您的服务范围化?并且还让服务容器管理上下文的生命周期
-
技术上,只有
IConnectionMultiplexer需要是一个单例。IMyService不一定是。容器将保留实例。
标签: c# asp.net-core dependency-injection redis stackexchange.redis