无法从Microsoft.Extensions.Logging解析ILogger - c#

我已经像这样配置了控制台应用程序的Main

var services = new ServiceCollection()
                .AddLogging(logging => logging.AddConsole())
                .BuildServiceProvider();

然后我尝试在另一个类中使用它

    private readonly ILogger _logger;

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

    public void MyFunc()
    {
        _logger.Log(LogLevel.Error, "My Message");
    }

System.InvalidOperationException:'无法解析类型的服务
'Microsoft.Extensions.Logging.ILogger'

我已经尝试过解决方案here,但对我而言不起作用。

编辑
根据Yaakov在下面的评论和this Github comment,我可以通过此操作正确解决该问题

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

我本来希望在最初的BuildServiceProvider中使用此功能,但看起来每次要使用记录器(或创建自己的ILogger)时都必须重复此操作。

参考方案

ILogger不再默认注册,但ILogger<T>已注册。如果仍要使用ILogger,则可以使用以下(Startup.cs)手动注册它:

    public void ConfigureServices(IServiceCollection services)
    {
        var serviceProvider = services.BuildServiceProvider();
        var logger = serviceProvider.GetService<ILogger<AnyClass>>();
        services.AddSingleton(typeof(ILogger), logger);
        ...
     }

AnyClass可以是通用的,例如:

     public class ApplicationLogs
     {
     }

所以:

        public void ConfigureServices(IServiceCollection services)
        {
            var serviceProvider = services.BuildServiceProvider();
            var logger = serviceProvider.GetService<ILogger<ApplicationLog>>();
            services.AddSingleton(typeof(ILogger), logger);
            ...
         }

ILogger现在将通过构造函数注入进行解析

.Net核心3:Microsoft.Extensions.Logging.Internal中不存在内部名称空间 - c#

我有一个使用Microsoft.Extensions.Logging.Internal命名空间(特别是FormattedLogValues类)的.Net core 2.1项目。我现在正在迁移到.Net core 3,找不到关于FormattedLogValues移至何处或其替代品的文档。甚至名称空间documentation也被删除有小费吗? 参考方案 我通…

从JAVA调用方法C#.NET - java

我有一个C#.NET项目中创建的dll,我想从Java程序中调用方法。我想知道是否存在实现此目标的机会,然后遇到了JNA和JNI。我应该使用哪一个?有什么建议么?我只需要在使用C#.NET编写的类中调用方法并处理Java程序的结果即可。 参考方案 这取决于您的应用程序,但是您可以将C#DLL放在服务中,例如WCF并以这种方式将功能公开给Java代码。使用ws…

从ASP.NET 1.1转换为ASP.Net 3.5后,单选按钮停止工作 - javascript

[我在下面以FYI的形式发布我们的问题和解决方案。如果您有Microsoft或代表机构对此问题的正式声明,我会将其标记为答案。否则,我下面的帖子将作为答案]。问题:我们采用了ASP.Net 1.1程序,并将其转换为ASP.Net 3.5。该页面最初正确显示,默认情况下选中一个单选按钮,并显示一个项目列表(“列表A”)。当我们单击另一个单选按钮时,它将正确显示…

.NET Core解决方案中同时具有API和MVC项目的约定 - c#

我有一个由以下项目构成的ASP.NET Core(.NET Core 2.2)应用程序:API:表示WebAPI(控制器继承ControllerBase)服务:包含API控制器用来访问数据库等的服务数据库:它包含常用的数据库存储库,服务层可利用这些数据库访问数据库现在,我想添加一个与API对话的UI(MVC部分位于.NET核心之前)。 .NET Core如何…

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……