Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在console应用程序中配置ConsoleLogger?_C#_Asp.net Core_.net Core - Fatal编程技术网

C# 如何在console应用程序中配置ConsoleLogger?

C# 如何在console应用程序中配置ConsoleLogger?,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我正在尝试使用.NET CORE 3.1构建一个控制台应用程序,但在注入控制台记录器时遇到问题 在最近的版本中,日志记录的注入方式似乎发生了显著的变化,各种风格的教学教程似乎都不符合我的意图 我有一个界面: public interface IMyDoer { void DoSomething(); } 我想在其中注入一个ILogger的类: public class MyDoer : IMyDoer { private readonly ILogger logger;

我正在尝试使用.NET CORE 3.1构建一个控制台应用程序,但在注入控制台记录器时遇到问题

在最近的版本中,日志记录的注入方式似乎发生了显著的变化,各种风格的教学教程似乎都不符合我的意图

我有一个界面:

public interface IMyDoer
{
    void DoSomething();
}
我想在其中注入一个ILogger的类:

public class MyDoer : IMyDoer
{
    private readonly ILogger logger;
    public MyDoer(ILogger logger)
    {
        this.logger = logger;
    }

    public void DoSomething()
    {
        this.logger.Log(LogLevel.Information, "Doing something");
    } 
}
然后是Main(),在这里我试图配置DI容器来构造Doer对象,配置ILogger来登录控制台

public class Program
{
    public static void Main(string[] args)
    {
        var serviceCollection = new ServiceCollection();
        ConfigureServices(serviceCollection);

        var serviceProvider serviceCollection.BuildServiceProvider();

        var myDoer = serviceProvider.GetService<IMyDoer>();

        myDoer.DoSomething();
    }

    private static void ConfigureServices(ServiceCollection serviceCollection)
    {
        serviceCollection.AddLogging(configure => {
            configure.AddConsole();
        });

        serviceCollection.AddSingleton<IMyDoer, MyDoer>();
    }
}

关于我应该如何做这件事有什么想法吗?

ILogger
未在ASP.NET Core DI容器中注册。请改用
ILogger

public class Program
{
    static void Main(string[] args)
    {
        var serviceCollection = new ServiceCollection();
        ConfigureServices(serviceCollection);

        using (var serviceProvider = serviceCollection.BuildServiceProvider())
        using (var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()))
        {
            var myDoer = serviceProvider.GetService<IMyDoer>();

            myDoer.DoSomething();
        }
    }

    private static void ConfigureServices(ServiceCollection serviceCollection)
    {
        serviceCollection
            .AddSingleton<IMyDoer, MyDoer>();
    }
}
System.InvalidOperationException
  HResult=0x80131509
  Message=Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'MyDoer.DoSomething'.
  Source=Microsoft.Extensions.DependencyInjection
public class MyDoer : IMyDoer
{
    private readonly ILogger<MyDoer> logger;

    public MyDoer(ILogger<MyDoer> logger)
    {
        this.logger = logger;
    }

    // ...
}
public class MyDoer : IMyDoer
{
    private readonly ILogger logger;

    public MyDoer(ILoggerFactory loggerFactory)
    {
        this.logger = loggerFactory.CreateLogger("YourCategory");
    }

    // ...
}