当我在我的启动类
中向configure服务方法添加服务时services.AddSingleton<IGoogleApi, GoogleApi>();
我收到以下错误。
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware [0] 执行请求时发生了未处理的异常 System.InvalidOperationException:尝试激活'MultilanguageTranslatorAPI.Controllers.WordsController'时,无法解析类型'MultilanguageTranslatorAPI.Services.GoogleApi'的服务。
如果我将其更改为(已删除的界面)
services.AddSingleton<GoogleApi, GoogleApi>();
错误消失了,一切正常。但为什么?我班上有什么问题?构造函数可能是可疑的。
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));
}
}
应该如何查看此实施的正确代码? 在此先感谢: - )
答案 0 :(得分:4)
您的控制器正在此处使用其中的具体类型GoogleApi
。
public WordsController(TranslatorDbContext context, UserManager<User> userManager, GoogleApi api)
它应该采用类型IGoogleApi
,如下所示:
public WordsController(TranslatorDbContext context, UserManager<User> userManager, IGoogleApi api)
当您使用具体类型时,IOC容器无法使用IGoogleApi
到GoogleApi
的单例映射,因为它不是类型要求的依赖性。