首页 > 解决方案 > 无法使用依赖注入解析服务类型

问题描述

我收到了这个 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);
}

正如我所看到的,我已经在配置服务中指定了单例以明确地将服务与接口配对,但这还不够,有什么想法吗?

标签: c#asp.netasp.net-coredependency-injectionredis

解决方案


我相信这可能会发生,因为您在 CacheManagementService 的内部私有字段中具有相同的接口,称为“缓存”。


推荐阅读