首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单例ImplementationType:尝试激活时无法解析'Nest.IElasticClient‘类型的服务

单例ImplementationType:尝试激活时无法解析'Nest.IElasticClient‘类型的服务
EN

Stack Overflow用户
提问于 2020-09-08 10:39:06
回答 1查看 162关注 0票数 0

我有一个使用Elastic Core3.1的默认web api模板项目,并且我已经在我的startup.cs上注册了.NET搜索嵌套。但是当我加载它的时候,它在

program.cs中的Singleton ImplementationType: Unable to resolve service for type 'Nest.IElasticClient' while attempting to activate

代码语言:javascript
运行
复制
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

这是我的startup.cs

代码语言:javascript
运行
复制
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSingleton<IProductService, ESProductService>();
            services.Configure<ProductSettings>(Configuration.GetSection("product"));
            services.AddElasticsearch(Configuration);
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

下面是ElasticsearchExtensions扩展类

代码语言:javascript
运行
复制
public static class ElasticsearchExtensions
    {
        public static void AddElasticsearch(this IServiceCollection services, IConfiguration configuration)
        {
            var url = configuration["elasticsearch:url"];
            var defaultIndex = configuration["elasticsearch:index"];

            var settings = new ConnectionSettings(new Uri(url))
                .DefaultIndex(defaultIndex);

            AddDefaultMappings(settings);

            var client = new ElasticClient(settings);

            services.AddSingleton(client);

            CreateIndex(client, defaultIndex);
        }

        private static void AddDefaultMappings(ConnectionSettings settings)
        {
            settings
                .DefaultMappingFor<Product>(m => m
                .Ignore(p => p.Price)
                .Ignore(p => p.Quantity)
                .Ignore(p => p.Rating)
            );
        }

        private static void CreateIndex(IElasticClient client, string indexName)
        {
            var createIndexResponse = client.Indices.Create(indexName,
                index => index.Map<Product>(x => x.AutoMap())
            );
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 10:06:38

问题解决了。AddSingleton遗漏了这个接口。services.AddSingleton<IElasticClient>(client);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63786420

复制
相关文章

相似问题

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