简体   繁体   English

.NET Core在另一个单例服务中注入单例服务

[英].NET Core inject singleton service in another singleton service

I am using StackExchange.Redis to connect to Redis server from .NET Core. 我正在使用StackExchange.Redis从.NET Core连接到Redis服务器。 How can I inject singleton IConnectionMultiplexer to another singleton service? 如何将单例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 MyService.cs

private DbContext _dbContext;
private IConnectionMultiplexer _redis;

public MyService(DbContext dbContext, IConnectionMultiplexer redis)
{
    _dbContext = fitDBContext;
    _redis = redis;
}

What do I need to put instead of ??? 我需要放什么而不是??? in ConfigureServices ? ConfigureServices Is there any other approach? 还有其他方法吗?

StackExchange.Redis suggests ( link ) that we save the returned value of ConnectionMultiplexer.Connect(...) call and reuse it. StackExchange.Redis建议( link )我们保存ConnectionMultiplexer.Connect(...)调用的返回值并重新使用它。 Therefore, I created singleton service for it (it is based on another StackOverFlow question ) which can be injected, but I am not having any luck injecting it to another SINGLETON service MyService . 因此,我为此创建了单例服务(它基于另一个StackOverFlow问题 ),但是我没有运气将其注入到另一个SINGLETON服务MyService

You can use the factory delegate overload for AddSingleton when registering the service 注册服务时,可以将工厂委托重载用于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>())
    );

    //...
}

The delegate passes in an IServiceProvider which can be used to resolve desired services. 委托传入一个IServiceProvider ,该服务可用于解析所需的服务。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 .NET Core 6 将数据库上下文注入 Singleton 服务 - .NET Core 6 inject databasecontext to Singleton Service .NET 核心 DI 允许将作用域服务注入本地机器上的 singleton - .NET Core DI allowing to inject scoped service into singleton on local machine 通过注解注册 .NET Core singleton 服务 - Register .NET Core singleton service via annotation 从.net Core 2.1中的单例服务注入范围服务 - Injecting scoped service from singleton service in .net core 2.1 托管服务和Singleton服务之间的.NET核心差异 - .NET Core Difference between Hosted Service and Singleton Service Singleton 服务和 EF Core dbContext - Singleton service and EF Core dbContext 如何创建自定义类的单例并将其注入.Net core 2.0中的其他类? “没有注册“服务”类型的服务。”? - How to create a singleton of a custom class and inject it other classes in .Net core 2.0? 'No service for type 'Services' has been registered.'? ASP.NET 核心在单例服务上调用异步初始化 - ASP.NET core call async init on singleton service 应用程序生命周期并在 ASP.NET 内核中添加 Singleton DI 服务 - Application Lifetime and Add Singleton DI service in ASP.NET Core .net 核心 DI 注入重复 singleton 服务用于 BuildServiceProvide - .net core DI injection duplicated singleton service for BuildServiceProvide
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM