.net core 6.0 web api app启动时如何加载数据?

How to load data when .net core 6.0 web api app started?

我想将文件数据加载到 program.cs(.net core 6.0) 上的缓存内存中,加载的数据将在许多服务中使用。

所以我在源代码中输入了builder.Services.AddMemoryCache();

但是,我不知道如何使用那里的这个内存缓存(program.cs)。

在以前的版本中,使用 Configure 方法和 IMemoryCache cache 参数,我可以像下面的代码块一样使用内存缓存加载数据

public void Configure(IMemoryCache cache)
{
    cache.set(...);
    cache.get(...);
}

我正在使用 .net core 6.0 web api 进行开发。 有人知道如何在 .net core 6.0 中初始化 program.cs 上的数据吗?

下面是工作demo,大家可以参考一下

选项 1

建好虚拟主机后,在Program.cs:

...
builder.Services.AddMemoryCache();
var app = builder.Build();
var cache=app.Services.GetRequiredService<IMemoryCache>();
cache.Set("key1", "value1");
...

选项 2

使用托管服务初始化缓存:

public class InitializeCacheService : IHostedService
    {
        private readonly IServiceProvider _serviceProvider;
        public InitializeCacheService (IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            using (var scope = _serviceProvider.CreateScope())
            {
                var cache = _serviceProvider.GetService<IMemoryCache>();

                cache.Set("key1", "value1");
            }

            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            return Task.CompletedTask;
        }
    }

在Program.cs中添加以下代码:

builder.Services.AddMemoryCache();
builder.Services.AddHostedService<InitializeCacheService>();

ValuesController(两个选项都使用这个控制器)

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly IMemoryCache _cache;
        public ValuesController(IMemoryCache cache)
        {
            _cache = cache;

        }
        [HttpGet("{key}")]
        public ActionResult<string> Get(string key)
        {
            //_cahce.Count is 0
            if (!_cache.TryGetValue(key, out var value))
            {
                return NotFound($"The value with the {key} is not found");
            }

            return value + "";
        }
    }

结果:

更新