单例对象中的多个 Elasticsearch 连接在控制器中获取一个特定的单例弹性搜索 class

Multiple Elasticsearch connection in singleton object Getting one specific Singleton elastic search in controller class

将 AcqClient 和 NcClient 传递到同一接口

//AcqClient和NcClient是静态只读变量

      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)

在我的控制器上class当我这样做时我得到了最后一个对象

    public class controller:Controller{
     public controller(IElasticClient elasticclient){
     
        _elasticclient=elasticlient;
        }
     }

我这样做过

IServiceCollection 委托

public delegate IServiceCollection ServiceResolver(string key);

创建弹性搜索单例对象

   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>();
        }