将AcqClient和NcClient传递到同一接口
//AcqClient和NcClient为静态ReadOnly变量
public static void Connection(){
AcqClient = new ElasticClient(AcqConnection);
NcClient= new ElasticClient(NcConnection);创建单例对象
services.AddSingleton<IElasticClient>(AcqClient);
services.AddSingleton<IElasticClient>(NcClient);
}在Startup.cs中实现
service.Connection(configuration)在我的控制器类上,当我这样做的时候,我得到了最后一个对象
public class controller:Controller{
public controller(IElasticClient elasticclient){
_elasticclient=elasticlient;
}
}发布于 2020-09-28 19:22:15
我就是这样做的
IServiceCollection委派
public delegate IServiceCollection ServiceResolver(string key);
创建Elastic Search单例对象
var firstobject = new ElasticClient(firstconnection);
var secondobject= new ElasticClient(secondconnection);使用ServiceResolver创建对象
services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
if (key== "A")
{
services.AddSingleton<IElasticClient>(firstobject);
}
else if (key == "N")
{
services.AddSingleton<IElasticClient>(secondobject);
}
return services;
});ElasticSearch在一个控制器中不同节点的连接
private static IElasticClient _elasticClient;
private readonly IServiceCollection _aService;
public static string clsName = "ElasticRandDController";
public FirstConstructor(ServiceResolver serviceAccessor)
{
_aService = serviceAccessor("N");
var serviceProvider = _aService.BuildServiceProvider();
_elasticClient = serviceProvider.GetService<IElasticClient>();
}在其他控制器中
private static IElasticClient _elasticClient;
private readonly IServiceCollection _aService;
public SecondConstructor(ServiceResolver serviceAccessor)
{
_aService = serviceAccessor("A");
var serviceProvider = _aService.BuildServiceProvider();
_elasticClient = serviceProvider.GetService<IElasticClient>();
}https://stackoverflow.com/questions/63949465
复制相似问题