Какой лучший объем регистрации DI для класса CloudTableClient в ASP.NET Core - PullRequest
1 голос
/ 21 марта 2019

Я создаю веб-приложение с ASP.NET Core 2.2 и хранилищем таблиц Azure. Поскольку Microsoft предоставляет нам класс CloudTableClient в Azure Storage SDK, я буду использовать этот класс с Dependency Injection (DI). Однако в стандартном подходе DI есть три метода определения области регистрации, такие как AddScoped, AddTransient и AddSingleton. У меня вопрос, какой объем регистрации является лучшим для класса CloudTableClient. Я подумал, что AddSingleton лучше всего, потому что не происходит голодание пула соединений, и я буду использовать его как прикрепленный пример кода. Но если использование AddSingleton в какой-то мере плохо (т.е. безупречность или надежность), я бы хотел получить совет.

//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    //do something

    services.AddSingleton(provider =>
    {
        var settings = Configuration["AzureStorageConnectionString"];
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(settings);
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
        return tableClient;
    });

    //do something
}

//SampleController
public class SampleController : Controller
{
    private CloudTable _table { get; };

    public SampleController(CloudTableClient tableClient)
    {
        _table = tableClient;
    }

    public async Task<IActionResult> GetSample(string id)
    {
        //do something with _table
    }
}

1 Ответ

1 голос
/ 21 марта 2019

AddScoped , тогда он будет создавать нового клиента для каждого запроса или AddTransient , который будет выдавать вам новый экземпляр каждый раз, когда вы его запрашиваете. Если вы используете статические данные, то для всех потоков может быть обслужен только один экземпляр, поскольку экземпляр не дает вам гарантии, что они безопасны для потоков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...