Ответ
В ASP.NET Core нет встроенной абстракции с точным названием "Application Storage". Этот термин может относиться к одному из следующих паттернов хранения данных на уровне приложения:
-
In-Memory Storage (Память приложения):
- Когда использовать: Для кэширования общих, часто читаемых данных, которые дорого вычислять и которые не критичны к потере при перезапуске приложения.
-
Как реализовать: Через
IMemoryCache.public class MyService { private readonly IMemoryCache _cache; public MyService(IMemoryCache cache) => _cache = cache; public async Task<MyData> GetDataAsync() { return await _cache.GetOrCreateAsync("myKey", async entry => { entry.SlidingExpiration = TimeSpan.FromMinutes(5); return await ExpensiveDatabaseCallAsync(); }); } }
-
Статические поля или сервисы с Singleton lifetime:
- Когда использовать: Крайне осторожно, для глобального, неизменяемого состояния (например, конфигурация, справочники), доступного всем запросам. Небезопасно для изменяемых данных из-за проблем с параллелизмом.
public static class AppState { public static readonly IReadOnlyDictionary<string, string> Config; } // Или в Startup.cs: services.AddSingleton<MySharedService>();
- Когда использовать: Крайне осторожно, для глобального, неизменяемого состояния (например, конфигурация, справочники), доступного всем запросам. Небезопасно для изменяемых данных из-за проблем с параллелизмом.
-
Работа с файловой системой (App-специфичные папки):
- Когда использовать: Для хранения файлов, специфичных для данного экземпляра приложения (логи, сгенерированные отчеты, временные файлы).
-
Как реализовать: Использовать
IHostingEnvironment/IWebHostEnvironmentдля получения путей.public class FileService { private readonly IWebHostEnvironment _env; public FileService(IWebHostEnvironment env) => _env = env; public string GetAppStoragePath() { return Path.Combine(_env.ContentRootPath, "App_Data"); } }
Вывод: Выбор механизма зависит от типа данных (кэш, конфигурация, файлы), требований к производительности, сохранности при перезапуске и потокобезопасности.