如何在创建asp.net core web api时使用数据加载缓存层?

问题描述

我创建了一个 web api,它根据在发布请求中收到的加密用户详细信息来处理 jwt 令牌的创建。

除了这个 STS api 还应该处理缓存层(Redis 或 Hazelcast)的填充,以及数据库中存在的所有用户数据。目前我已经使用依赖注入注册了缓存服务。这只会在 api 首次初始化时发生一次。

Gtk.Cssprovider css_provider = new Gtk.Cssprovider ();
css_provider.load_from_path ("style.css");
Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default (),css_provider,Gtk.STYLE_PROVIDER_PRIORITY_USER);

并且在TokenController中添加了service作为参数来初始化CachingService类,从而初始化缓存层。这样当cacheService对象第一次初始化时,它会从数据库获取所有用户行并将其存储为一个键值Redis/Hazelcast 数据库中的配对。

services.AddSingleton<ICacheService,RedisCacheService>();

但是Token Controller构造函数只有在调用端点时才会初始化,所以我不得不创建一个单独的认[HttpGet]端点,以确保在首次初始化STS api时调用构造函数,以确保cacheService对象被创建,数据被加载到缓存中。

public TokenController(
        ICryptographyService cryptographyService,crudDBContext crudDBContext,IConfiguration configuration,ICacheService cacheService)
    {
        _cryptographyService = cryptographyService;
        _context = crudDBContext;
        _config = configuration;
        _cacheService = cacheService;
    }

请让我知道是否有正确的方法可以在不调用端点的情况下执行此操作,例如能够使用依赖注入但同时调用一些代码而不调用端点。我需要使用依赖注入,因为我只需更改 startup.cs 文件中的类名,就应该能够在 Redis 和 Hazelcast 之间切换。

解决方法

关于 Hazelcast 和依赖项注入:首先,您需要使用 sources 而不是 Hazelcast NuGet 版本。接下来,配置取决于您是在 Container EnvironmentHosted Environment 中。在这两种情况下,配置键将从相同的来源以相同的顺序收集,并且选项将在服务容器中注册,并通过依赖注入提供