c# - 无法使用依赖注入解析服务类型
问题描述
我收到了这个 DI 错误,虽然我已经阅读了具有相同错误的其他帖子,但还不足以找到导致此错误的原因:
System.InvalidOperationException:尝试激活“WatsonConnection.Controllers.CacheManagementController”时无法解析“WatsonConnection.Interfaces.ICacheManagement”类型的服务。
startup.cs 中的配置服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ICacheManagement, CacheManagementService>();
services.AddSingleton<IConnectionMultiplexer>(
ConnectionMultiplexer.Connect(Configuration["Redis:ConnectionString"])
);
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = Configuration["Redis:ConnectionString"];
});
services.AddHttpContextAccessor();
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WatsonConnector", Version = "v1" });
});
}
这是我正在尝试实现服务的控制器:
public class CacheManagementController : ControllerBase
{
ICacheManagement cacheManagement;
public CacheManagementController(ICacheManagement _cacheMgmt)
{
this.cacheManagement = _cacheMgmt;
}
[HttpGet("CachedKeys")]
public IActionResult GetListCacheKeys([FromQuery][DefaultValue("*")] string pattern)
{
return Ok(cacheManagement.GetListCacheKeys(pattern));
}
}
服务实现:
public class CacheManagementService : ICacheManagement
{
private IConnectionMultiplexer multiplexer;
private ICacheManagement cache;
public CacheManagementService(IConnectionMultiplexer multiplexer)
{
this.multiplexer = multiplexer;
}
public IEnumerable<RedisKey> GetListCacheKeys([DefaultValue("*"), FromQuery] string pattern)
{
var keys = multiplexer
.GetServer(multiplexer
.GetEndPoints()
.First())
.Keys(pattern: pattern ?? "*").ToArray();
return keys;
}
}
这是接口:
public interface ICacheManagement
{
IEnumerable<RedisKey> GetListCacheKeys([FromQuery][DefaultValue("*")] string pattern);
}
正如我所看到的,我已经在配置服务中指定了单例以明确地将服务与接口配对,但这还不够,有什么想法吗?
解决方案
我相信这可能会发生,因为您在 CacheManagementService 的内部私有字段中具有相同的接口,称为“缓存”。
推荐阅读
- javascript - 使用 javascript 复制永久链接
- javascript - 触摸移动不滑动滑动滑块上的多个元素
- node.js - Puppeteer 似乎不适用于 docker
- java - 如何从 ble 设备 android 读取数据?
- python - 避免 for 循环在 3d 数组上运行线性回归
- angular - 有没有办法将ppt嵌入角度并通过办公室查看?
- linear-programming - 如何在 GuRoBi 中检查 LP 的解是否为二进制
- node.js - 获取嵌套字段 ElasticSearch 中的最后一项
- cassandra - 事物板卡桑德拉兼容性
- google-cloud-platform - 如何调试 Google Cloud Dataflow Streaming Engine 中断?