首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >singleton对象中的多个Elasticsearch连接在控制器类中获取一个特定的Singleton弹性搜索

singleton对象中的多个Elasticsearch连接在控制器类中获取一个特定的Singleton弹性搜索
EN

Stack Overflow用户
提问于 2020-09-18 12:45:55
回答 1查看 155关注 0票数 1

将AcqClient和NcClient传递到同一接口

//AcqClient和NcClient为静态ReadOnly变量

代码语言:javascript
复制
      public static void Connection(){
        AcqClient = new ElasticClient(AcqConnection);
        NcClient= new ElasticClient(NcConnection);

创建单例对象

代码语言:javascript
复制
        services.AddSingleton<IElasticClient>(AcqClient);
        services.AddSingleton<IElasticClient>(NcClient);
     }

在Startup.cs中实现

代码语言:javascript
复制
  service.Connection(configuration)

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

代码语言:javascript
复制
    public class controller:Controller{
     public controller(IElasticClient elasticclient){
     
        _elasticclient=elasticlient;
        }
     }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-28 19:22:15

我就是这样做的

IServiceCollection委派

public delegate IServiceCollection ServiceResolver(string key);

创建Elastic Search单例对象

代码语言:javascript
复制
   var firstobject = new ElasticClient(firstconnection);
   var secondobject= new ElasticClient(secondconnection);

使用ServiceResolver创建对象

代码语言:javascript
复制
    services.AddTransient<ServiceResolver>(serviceProvider => key =>
             {
                if (key== "A")
                {
                   services.AddSingleton<IElasticClient>(firstobject);
                }
                else if (key == "N")
                {
                    services.AddSingleton<IElasticClient>(secondobject);
                }
                return services;
        });

ElasticSearch在一个控制器中不同节点的连接

代码语言:javascript
复制
   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>();
        }

在其他控制器中

代码语言:javascript
复制
     private static IElasticClient _elasticClient;
        private readonly IServiceCollection _aService;
        public SecondConstructor(ServiceResolver serviceAccessor)
        {
            _aService = serviceAccessor("A");
            var serviceProvider = _aService.BuildServiceProvider();
            _elasticClient = serviceProvider.GetService<IElasticClient>();
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63949465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档