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

在.NET Framework 4.8中用Unity配置Redis分布式缓存遇构造函数错误

问题分析

报错的核心原因是:你仅注册了自定义泛型缓存接口和ConnectionMultiplexer,但未给IDistributedCache接口绑定具体实现类。Unity容器在构造GeoDistributedCache时,无法找到IDistributedCache的实例,而IDistributedCache作为接口本身无法直接实例化,因此抛出"No public constructor is available"错误。

解决步骤

1. 安装必要NuGet包

确保项目已安装以下依赖包(通过NuGet包管理器或Package Manager Console):

  • StackExchange.Redis
  • Microsoft.Extensions.Caching.StackExchangeRedis
  • Microsoft.Extensions.Options
  • Unity(若为ASP.NET MVC项目,替换为Unity.AspNet.Mvc)

2. 修改Unity容器注册代码

在UnityConfig.RegisterComponents()中补充IDistributedCache的实现注册,并配置Redis缓存选项:

using Microsoft.Extensions.Caching.StackExchangeRedis;
using Microsoft.Extensions.Options;

// 1. 初始化Redis连接复用器
var redis = ConnectionMultiplexer.Connect("connectionString");
container.RegisterInstance(redis);

// 2. 配置Redis缓存选项
var redisCacheOptions = new RedisCacheOptions
{
    Configuration = "connectionString" // 与上方Redis连接字符串保持一致
};
// 注册IOptions实例,供RedisDistributedCache构造使用
container.RegisterInstance(Options.Create(redisCacheOptions));

// 3. 绑定IDistributedCache到官方Redis实现类
container.RegisterType<IDistributedCache, RedisDistributedCache>();

// 4. 注册你的自定义泛型缓存实现
container.RegisterType<IDistributedCache<FeatureCollection>, GeoDistributedCache>();

3. 确认构造函数依赖合法性

你的GeoDistributedCache构造函数已正确声明对IDistributedCache的依赖,无需修改:

public GeoDistributedCache(IDistributedCache cache)
{
    // 你的业务逻辑代码
}

配置完成后,Unity容器会先实例化RedisDistributedCache(依赖已注册的IOptions<RedisCacheOptions>和ConnectionMultiplexer),再将其注入到GeoDistributedCache的构造函数中,彻底解决构造函数缺失的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:05:02