Asp.Net Core 没有注册类型的服务

Has*_*ngü 4 dependency-injection asp.net-core

我有以下两个类

public class RepositoryConnection : IRepositoryConnection{

    public RepositoryConnection(IConfiguration configuration, ILogger<RepositoryConnection> logger){
    //STUFF
    }

}

public class AuthenticationTokenFactory : IAuthenticationTokenFactory {

   public AuthenticationTokenFactory(ILogger<AuthenticationTokenFactory> logger) {
    //STUFF 
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 Startup.cs

public class Startup {

    public Startup(IConfiguration configuration) {
        Configuration = configuration;
    }
    public void ConfigureServices(IServiceCollection services) {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddSingleton<IAuthenticationTokenFactory, AuthenticationTokenFactory>();
        services.AddSingleton<IRepositoryConnection,RepositoryConnection>();
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以成功注入IAuthenticationTokenFactory控制器,但是当我尝试注入时IRepositoryConnection出现以下错误?

InvalidOperationException: 没有类型的服务?'TrainingCommerce.Accessors.RepositoryConnection' 已被注册。


感谢评论,我立即注意到我的错误方式。我试图在另一条线路上访问

var debug = ControllerContext.HttpContext.RequestServices.GetRequiredService<RepositoryConnection>();
Run Code Online (Sandbox Code Playgroud)

Mik*_*der 7

尝试注入接口而不是实现:

在您的示例中,您注入的ILogger<RepositoryConnection> logger是一个错字,应该是:ILogger<IRepositoryConnection> logger

所以:

public class RepositoryConnection : IRepositoryConnection{
    public RepositoryConnection(IConfiguration configuration, ILogger<IRepositoryConnection> logger){
    //STUFF
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这与问题无关,因为`ILogger&lt;T&gt;` 不创建或不需要`T` 的实例,它只需要`T` 的类型来设置错误“源字符串”(即用于日志过滤和显示调用记录器的上下文)。Kirk 的评论在正确的轨道上,您可以从错误消息中阅读 (3认同)