.net core DbCommandInterceptor中的依赖注入

.net core DbCommandInterceptor中的依赖注入,.net-core,dependency-injection,interceptor,ef-core-3.1,ef-core-3.0,.net Core,Dependency Injection,Interceptor,Ef Core 3.1,Ef Core 3.0,我正在尝试将Azure Redis缓存添加到我的应用程序中。我尝试使用拦截器执行此操作,因此,当查询完成时,如果结果存在于缓存中,我将替换结果,并少执行一次查询,否则我将获得查询结果并将其存储在缓存中。 当然,我只是在涉及某些表时才这样做。 我已将Redis缓存添加到启动中: services.AddDistributedRedisCache(config => { config.Configuration = GetAppSettingsValue

我正在尝试将Azure Redis缓存添加到我的应用程序中。我尝试使用拦截器执行此操作,因此,当查询完成时,如果结果存在于缓存中,我将替换结果,并少执行一次查询,否则我将获得查询结果并将其存储在缓存中。 当然,我只是在涉及某些表时才这样做。 我已将Redis缓存添加到启动中:

services.AddDistributedRedisCache(config =>
        {
            config.Configuration = GetAppSettingsValue("RedisConnectionString", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
        });
现在我需要在我的拦截器中使用它:

public class RedisCacheInterceptor : DbCommandInterceptor
{
    private readonly IDistributedCache _distributedCache;

    public RedisCacheInterceptor(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }
}
此时,当我尝试将拦截器添加到db连接时,我不知道如何使用依赖项注入实例化拦截器

我应该如何解决这个问题?
我是否以错误的方式使用拦截器?

这并不能回答您使用拦截器的问题,但这种模式可能会有所帮助。查看此代码:

私有异步任务GetFromCacheOrDownloadAsync(字符串cacheKey,Func initializeFunction)
{
布尔缓存可用;
尝试
{
等待连接();
var value=await_database.StringGetAsync(cacheKey);
如果(!string.IsNullOrEmpty(值))
{
返回JsonSerializer.Deserialize(值);
}
cacheAvailable=true;
}
捕获(例外)
{
_logger.LogWarning(“哎呀,显然你的缓存坏了…”);
cacheAvailable=false;
}
var downloadeObject=wait initializeFunction();
var jsonValue=JsonSerializer.Serialize(下载对象);
如果可用(缓存可用)
{
wait_database.StringSetAsync(cacheKey,jsonValue);
}
返回下载的对象;
}
我调用这个函数是为了从Redis缓存中获取“某物”。我还传递了一个初始化函数,以便在数据不存在时调用。所以基本上:

  • 从缓存中获取数据
  • 如果数据不存在,则使用其他函数获取数据
  • 添加到缓存
请参阅包含以下示例的演示回购: