将 memorycache 注入 .NET 5 控制台应用程序

Injecting memorycache into a .NET 5 console app

我有一个 .NET 5 控制台应用程序,它将在后台工作程序中 运行 一个很长的 运行ning 进程。我收到编译错误提示:

'IServiceCollection' 不包含 'AddMemoryCache' 的定义,并且找不到可访问的扩展方法 'AddMemoryCache' 接受类型 'IServiceCollection' 的第一个参数(您是否缺少使用指令或程序集引用?)

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using MyBot;

using IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddLogging();
        services.AddSingleton<User>();
        services.AddMemoryCache();
        services.AddHostedService<Worker>();
    })
    .Build();

await host.RunAsync();

我想将内存缓存注入我的 Worker class,并打算在我的启动代码中注册它。注意 - 未注册 MemoryCache 会导致 运行 时间出现依赖项解析问题。

很多示例建议可以使用 AddMemoryCache,但是,我的应用程序不是显示大多数示例的 ASP.NET 应用程序。

我的工人 class 看起来像这样:

public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private User _user;
        private IMemoryCache _cache;

        public Worker(ILogger<Worker> logger, User user, IMemoryCache memoryCache)
        {
            _logger = logger;
            _user = user;
            _cache = memoryCache;
        }

如何在非 asp.net 应用程序中将 MemoryCache 对象注入到我的 Worker class 中?有什么想法吗?

要使用内存缓存,您必须确保项目具有对 Microsoft.Extensions.Caching.Memory.dll 程序集的引用。 在扩展方法AddMemoryCache()的documentation中可以看出。