Por que o ASP.NET Core DI sabe como resolver o ILogger <T>, mas não o ILogger?

Se a classe T contiver dependência no ILogger, a dependência será resolvida:

public class Foo
{
    private ILogger _logger;

    public Foo(ILogger<Foo> logger)
    {
        _logger = logger;
    }
}

mas o seguinte não funciona, poislogger será nulo:

public class Foo
{
    private ILogger _logger;

    public Foo(ILogger logger)
    {
        _logger = logger;
    }
}

questionAnswers(2)

yourAnswerToTheQuestion