在.NET Framework 4.8中用Unity配置Redis分布式缓存遇构造函数错误
问题分析
报错的核心原因是:你仅注册了自定义泛型缓存接口和ConnectionMultiplexer,但未给IDistributedCache接口绑定具体实现类。Unity容器在构造GeoDistributedCache时,无法找到IDistributedCache的实例,而IDistributedCache作为接口本身无法直接实例化,因此抛出"No public constructor is available"错误。
解决步骤
1. 安装必要NuGet包
确保项目已安装以下依赖包(通过NuGet包管理器或Package Manager Console):
StackExchange.RedisMicrosoft.Extensions.Caching.StackExchangeRedisMicrosoft.Extensions.OptionsUnity(若为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
相关产品推荐
相关产品推荐

