Прочитав этот пост, я могу понять различия между AddTransient
, AddScoped
и AddSingleton
, однако я не вижу практического использования каждого из них.
Мое понимание
AddTransient
Создает новый экземпляр каждый раз, когда клиент запрашивает его.
services.AddTransient<IDataAccess, DataAccess>();
будет возвращать новый объект DataAccess каждый раз, когда клиентский код запрашивает его. Скорее, конструктор.
Использование AddTransient
В случаях, когда нам нужно получить доступ к базе данных, чтобы прочитать и обновить ее, а также уничтожить объект доступа (DataAccess), лучше всего использовать AddTransient
- Не уверен насчет безопасности потока.
AddScoped
Создает новый экземпляр для каждого веб-запроса http.
Использование AddScoped
services.AddScoped<ShoppingCart>(serviceProvider => ShoppingCart.GetShoppingCart(serviceProvider));
это означает, что каждый веб-запрос будет иметь свой собственный экземпляр корзины покупок, что означает, что каждый пользователь/клиент будет иметь свой собственный экземпляр корзины покупок для этого веб-запроса http.
AddSingleton
Создайте один экземпляр для всех веб-запросов http.
Использование AddSingleton
Нашел этот код в примере приложения, но я не понимаю, как это полезно.
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Кто-нибудь может привести хороший практический пример, когда использовать AddSingleton и проверить, правильно ли я понимаю AddTransient и AddScoped?