.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 + "";
}
}
结果:
更新
我想将文件数据加载到 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 + "";
}
}
结果:
更新