1

将 SearchIndexClient 注册到 DI 容器的推荐方法是什么?(假设我们只有一个索引)将其注册为单例或瞬态?

4

2 回答 2

1

简短的回答是,您应该将其注册为单例,只要您确保避免使用非线程安全的属性和方法。它们中的大多数是线程安全的;只是避免从多个线程设置可变属性,你应该没问题。

有关为什么这是推荐的做法以及如何将其扩展为更复杂的场景的更深入讨论,请参阅此相关问题

于 2018-09-06T16:40:14.900 回答
0

ASP.NET Core应用程序中,您可以按如下方式注入客户端。

安装包:Microsoft.Extensions.AzureAzure.Search.Documents(这是最新的)

ConfigureServices方法中startup.cs,注册客户端:

using Microsoft.Extensions.Azure;

public void ConfigureServices(IServiceCollection services)
{
    services.AddAzureClients(builder =>
    {
        builder.AddSearchIndexClient(new 
            Uri("my resource url"), new 
            AzureKeyCredential("my resource key"));
    });

    services.AddControllers();
}

现在说你想在你的控制器中使用客户端,你可以像这样注入它:

public class MyApiController : ControllerBase
{
    private readonly SearchIndexClient _searchIndexClient;
  
    public MyApiController(SearchIndexClient searchIndexClient)
    {
        _searchIndexClient = searchIndexClient;
    }

}

不过,您可能不想直接将您的凭据放入ConfigureServices其中,在这种情况下,您可以将它们存储在appsettings.Development.json(或appsettings.Production.json)中:

  "SearchDocument": {
    "endpoint": "my resource url",
    "credential": { "key": "my resource key" }
  }

并在以下位置执行此操作ConfigureServices

services.AddAzureClients(builder =>
{   
    builder.AddSearchIndexClient(
        Configuration.GetSection("SearchDocument")); 
});

阅读有关使用 Azure SDK for .NET 进行依赖注入的更多信息。

于 2021-06-04T01:00:17.543 回答