C# 添加接口时,依赖项注入不起作用
当我向启动类中的configure services方法添加服务时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
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)