将内存缓存注入 .NET 5 控制台应用程序

Dri*_*ind 2 c# console-application backgroundworker .net-5

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

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

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();
Run Code Online (Sandbox Code Playgroud)

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

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

我的工人阶级是这样的:

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;
        }
Run Code Online (Sandbox Code Playgroud)

如何将 MemoryCache 对象注入到非 asp.net 应用程序中的 Worker 类中?有任何想法吗?

sbe*_*ker 5

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