You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7 Azure独立函数依赖注入报错:无法解析IDistributedCache

解决方案:独立模式Azure函数IDistributedCache依赖注入失败

独立模式(Isolated Worker Model)的Azure Functions不会自动注册IDistributedCache的实现,这和进程内模式不同,必须手动完成服务配置,具体步骤如下:

1. 安装对应NuGet包

根据你的缓存类型选择安装:

  • 开发/测试用内存缓存:安装Microsoft.Extensions.Caching.Memory
  • 生产用Azure Redis缓存:安装Microsoft.Extensions.Caching.StackExchangeRedis

2. 在Program.cs中注册缓存服务

独立函数的服务配置入口是Program.cs,需要在这里添加IDistributedCache的实现注册,同时确保你的自定义服务(比如CacheUtility)也被正确注册:

内存缓存示例

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        // 注册内存版分布式缓存
        services.AddDistributedMemoryCache();
        // 注册你的CacheUtility服务
        services.AddScoped<PROJ.Infrastructure.Persistence.Cache.CacheUtility>();
        // 注册其他项目的服务...
    })
    .Build();

host.Run();

Redis缓存示例

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        // 加载配置(本地用local.settings.json,生产用环境变量)
        var config = new ConfigurationBuilder()
            .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

        // 注册Redis分布式缓存
        services.AddStackExchangeRedisCache(options =>
        {
            options.Configuration = config["RedisConnectionString"];
            options.InstanceName = "PROJ-"; // 可选:缓存键前缀
        });

        // 注册自定义缓存工具类
        services.AddScoped<PROJ.Infrastructure.Persistence.Cache.CacheUtility>();
        // 其他项目服务注册...
    })
    .Build();

host.Run();

3. 配置缓存连接信息(Redis场景)

如果使用Redis,确保local.settings.json(本地开发)或生产环境变量中配置了连接字符串:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "RedisConnectionString": "your-redis-connection-string-here"
  }
}

4. 确认CacheUtility构造函数注入正确

检查你的CacheUtility类是否正确接收IDistributedCache参数:

namespace PROJ.Infrastructure.Persistence.Cache
{
    public class CacheUtility
    {
        private readonly IDistributedCache _cache;

        // 确保构造函数正确注入IDistributedCache
        public CacheUtility(IDistributedCache cache)
        {
            _cache = cache;
        }

        // 你的缓存操作方法...
    }
}

内容的提问来源于stack exchange,提问作者HoboJeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:15:38