c# - Singleton ImplementationType:尝试激活时无法解析 'Nest.IElasticClient'类型的服务

标签 c# elasticsearch

我有一个使用.NET Core 3.1的默认Web api模板项目,并且已经在startup.cs上注册了Elastic Search NEST。但是当我加载它时,它在Singleton ImplementationType: Unable to resolve service for type 'Nest.IElasticClient' while attempting to activate中的program.cs

        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
这是我的startup.cs
    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扩展类
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())
            );
        }
    }

最佳答案

问题解决了。 AddSingleton错过了界面。 services.AddSingleton<IElasticClient>(client);

关于c# - Singleton ImplementationType:尝试激活时无法解析 'Nest.IElasticClient'类型的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63786420/

相关文章:

c# - 尝试加载应用程序时出现以下错误。 - OwinStartupAttribute.FriendlyName 值

ruby - 使用 Elasticsearch 处理超出内存限制的文档处理

ruby-on-rails-4 - 使用 Elasticsearch/Searchkick 进行搜索/自动完成以前可以工作,但现在已损坏

typescript - 如何查询ISO日期为今天的对象?

c# - 用于 Windows 8 开发的 Metro 与 WPF?

c# - .net DispatcherTimer 重复触发刻度事件

c# - Visual Studio Express 2012 未在 Release 文件夹中构建 exe

c# - VirtueMart API 连接/网络引用

scala - 使用elastic4s返回嵌套字段

elasticsearch - 如何在Elasticsearch中映射人的年龄,使其保持真实