在 ASP.NET 应用程序中使用扩展 - .NET 6

Posted

技术标签:

【中文标题】在 ASP.NET 应用程序中使用扩展 - .NET 6【英文标题】:Using Extension in ASP.NET application - .NET 6 【发布时间】:2022-01-04 20:50:27 【问题描述】:

我试图让 NEST 在 ASP.NET 应用程序中工作。我正在关注指南https://blexin.com/en/blog-en/how-to-integrate-elasticsearch-in-asp-net-core/#highlighter_541789。我试图弄清楚如何在构建器上正确调用AddElasticsearch。我尝试了几种方法,但不断收到编译器投诉。

Extensions.cs

public static class Extensions

    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<LegiscanModelBill>(client, defaultIndex);
    

    private static void AddDefaultMappings(ConnectionSettings settings) => settings.DefaultMappingFor<LegiscanModelBill>(m => m);

    // private static void CreateIndex<T>(IElasticClient client, string indexName)
    // 
    //     var createIndexResponse = client.Indices.Create(indexName,
    //         index => index.Map<LegiscanModelBill>(x => x.AutoMap())
    //     );
    // 

    private static void CreateIndex<T>(ElasticClient client, string indexName) where T : class
    
        client.Indices.Create($"indexName_typeof(T).ToString", i => i.Map<T>(m => m.AutoMap()));
    

Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services
    .AddElasticsearch(options => options.configuration)
    .AddGraphQLServer()
    .AddQueryType<Query>();


var app = builder.Build();

app.MapGraphQL();

app.Run();

compiler error

Cannot convert lambda expression to type 'IConfiguration' because it is not a delegate type 

【问题讨论】:

options =&gt; options.configuration 是什么让您认为这是正确的?你是从哪里得到这个的? 自从我完成 .NET 以来已经有一段时间了,所以我真的只是在猜测。这是 VSCode 建议的选项。 @nvoigt 【参考方案1】:

options =&gt; options.configuration 只是没有意义的随机猜测,而不是 builder.Configuration

老实说,我认为这种拥有 main 方法但实际上没有 main 方法的新方法隐藏了太多,以至于它并没有使它“更容易”,它实际上使它更难 了解实际发生的情况。因为这一切都是隐藏的。无论如何,这就是你需要做的。

【讨论】:

我已经尝试过了,但我得到了错误'WebApplicationBuilder' does not contain a definition for 'AddElasticsearch' and the best extension method overload 'Extensions.AddElasticsearch(IServiceCollection, IConfiguration)' requires a receiver of type 'IServiceCollection' 能够通过更改扩展定义 public static void AddElasticsearch(this WebApplicationBuilder builder, IConfiguration configuration) 并更新代码以使用 builder.Services 来使其工作 对于原始评论,同样晦涩难懂,您可以使用智能感知查看找到等效属性。 @AntarrByrd 在 IServiceCollection 上添加扩展,然后添加适当的 using。

以上是关于在 ASP.NET 应用程序中使用扩展 - .NET 6的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件路径从 asp.net matlab ne builder dll 工具传递给 Matlab 函数

在 ASP.NET MVC 3 应用程序中扩展 Windows 身份验证

在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch

在 Asp.Net Core 中使用 Swagger 在请求中未发送授权承载令牌

我们可以扩展 HttpContext.User.Identity 以在 asp.net 中存储更多数据吗?

在 asp.net 和 Join 语句中连接到 Access 数据库