'ServiceCollection' 不包含 'GetService' 的定义

'ServiceCollection' does not contain a definition for 'GetService'

在控制台应用程序中使用 .net 6.0.101 Microsoft.Extensions.DependencyInjection.Abstractions 出现调用 GetService 方法时出现的错误。

    var serviceProvider = new ServiceCollection();
serviceProvider
    .AddLogging()
    .AddSingleton<IParentPublisher, ParentPublisher>()
    .AddDbContext<LPContext>(options => options.UseSqlServer(configuration["connectionstring"]))
    .BuildServiceProvider();

serviceProvider
            .GetService<ILoggerFactory>()
            .AddConsole(LogLevel.Debug);

首先你的 serviceProvider 实际上应该命名为 serviceCollection。辅助 - AddConsole should be called on ILoggingBuilder parameter of AddLogging (this is quite old 更改)并且没有超载接受最新包的日志级别。

因此您的代码应如下所示:

var serviceCollection = new ServiceCollection();
serviceCollection
    // add stuff     
    .AddLogging(builder => builder.AddConsole());
var serviceProvider = serviceCollection.BuildServiceProvider();
var loggerFactory = serviceProvider
    .GetService<ILoggerFactory>();

您可以通过 appsettings 设置 console log level

{
    "Logging": {
        "LogLevel": {
            "Microsoft": "Warning"
        },
        "Console": {
            "LogLevel": {
                "Microsoft": "Debug"
            }
        }
    }
}