.net 来自依赖项注入的服务返回null

.net 来自依赖项注入的服务返回null,.net,.net-core,dependency-injection,.net,.net Core,Dependency Injection,在my startup.cs中,我注册了我的服务: public void ConfigureServices(IServiceCollection services){ ... services.AddSingleton<ICompareService, CompareService>(); services.AddSingleton<IConsumer, Consumer>(); ... } Consumer.cs: pub

在my startup.cs中,我注册了我的服务:

public void ConfigureServices(IServiceCollection services){
     ...
     services.AddSingleton<ICompareService, CompareService>();
     services.AddSingleton<IConsumer, Consumer>(); 
     ...
}
Consumer.cs:

public class Consumer
{
    private readonly ICompareService _compareService;

    public Consumer(ICompareService compareService) : this()
    {
        _compareService = compareService;
    }
    
    public async Task<string> Foo(string foo){
        _compareService.RunCompare()
    }     
     

}
公共类消费者
{
专用只读ICompareService\u compareService;
公共消费者(ICompareService compareService):此()
{
_compareService=compareService;
}
公共异步任务Foo(字符串Foo){
_compareService.RunCompare()
}     
}

为什么要使用_compareService时它是空的?此设置是否错误?

发生这种情况是因为您的DI容器无法将Iconsumer接口与Consumer类关联。使用者类不继承IConsumer接口

工作原理如下:

public class Consumer : IConsumer
{
    private readonly ICompareService _compareService;

    public Consumer(ICompareService compareService) : this()
    {
        _compareService = compareService;
    }
    
    public async Task<string> Foo(string foo){
        _compareService.RunCompare()
    }     
}
只有这样IConsumer接口才会被解析

我想类似的事情也发生在iCompaReserve身上,但你没有在你的问题中提供足够的信息


但这是非常基本的,我强烈建议您阅读一下依赖性注射是如何工作的

目前的问题是不完整的,因此不清楚。如果没有一个能澄清您的具体问题或额外细节来强调所做的工作,就很难重现问题,从而更好地理解实际问题。您能否重新格式化问题,以便我们更清楚地了解当前问题以及您实际在做什么?请参阅页面以获取澄清此问题的帮助。答案已更新!
public class Consumer : IConsumer
{
    private readonly ICompareService _compareService;

    public Consumer(ICompareService compareService) : this()
    {
        _compareService = compareService;
    }
    
    public async Task<string> Foo(string foo){
        _compareService.RunCompare()
    }     
}
public interface IConsumer {
   //functionality to be enforced
}