C# 添加接口时,依赖项注入不起作用

C# 添加接口时,依赖项注入不起作用,c#,asp.net,dependency-injection,singleton,C#,Asp.net,Dependency Injection,Singleton,当我向启动类中的configure services方法添加服务时 services.AddSingleton<IGoogleApi, GoogleApi>(); services.AddSingleton(); 我得到以下错误 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0] 执行请求时发生未处理的异常 System.InvalidOperationException:尝试激活“Multil

当我向启动类中的configure services方法添加服务时

services.AddSingleton<IGoogleApi, GoogleApi>();
services.AddSingleton();
我得到以下错误

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0] 执行请求时发生未处理的异常 System.InvalidOperationException:尝试激活“MultilanguageTranslatorAPI.Controllers.WordsController”时,无法解析类型“MultilanguageTranslatorAPI.Services.GoogleApi”的服务

如果我将其更改为(已删除的接口)

services.AddSingleton();
错误消失了,一切正常。但是为什么呢?我的课怎么了?构造器可能是可疑的

public WordsController(TranslatorDbContext context, UserManager<User> userManager, GoogleApi api)
    {
        _userManager = userManager;
        _context = context;
        _api = api;
    }

public class GoogleApi : IGoogleApi
{
    private readonly TranslationClient _client;
    private readonly string jsonPath = "Json\\MultilanguageTranslator-82ea38c537d3.json";

    public GoogleApi()
    {
        using (var jsonStream = new FileStream(jsonPath, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            _client = TranslationClient
                .Create(GoogleCredential.FromStream(jsonStream));
        }
    }
publicWordsController(TranslatorDbContext上下文、UserManager用户管理器、GoogleApi)
{
_userManager=userManager;
_上下文=上下文;
_api=api;
}
公共类GoogleApi:IGoogleApi
{
私有只读TranslationClient\u客户端;
私有只读字符串jsonPath=“Json\\multi-languagetranslator-82ea38c537d3.Json”;
公共服务
{
使用(var jsonStream=newfilestream(jsonPath,FileMode.Open,FileAccess.Read,FileShare.Read))
{
_client=TranslationClient
.Create(GoogleCredential.FromStream(jsonStream));
}
}
此实现的正确代码应该是什么样子的?
提前感谢:-)

您的控制器在其构造函数中采用了具体类型,
GoogleApi

public WordsController(TranslatorDbContext context, UserManager<User> userManager, GoogleApi api)

当您使用具体类型时,IOC容器无法使用它的
igogleapi
GoogleApi
的单例映射,因为这不是请求的依赖类型。

您的控制器在其构造函数中使用具体类型,
GoogleApi

public WordsController(TranslatorDbContext context, UserManager<User> userManager, GoogleApi api)

当您使用具体类型时,IOC容器无法使用它的
igooglapi
GoogleApi
的单例映射,因为这不是请求的依赖类型。

谢谢,现在可以了!我被其他hing不是接口(也许它们应该是?)弄糊涂了谢谢,现在可以了!我被其他的hing不是接口弄糊涂了(也许它们应该是?)
public WordsController(TranslatorDbContext context, UserManager<User> userManager, IGoogleApi api)