C# .NET Core 2.1从类库记录到数据库

C# .NET Core 2.1从类库记录到数据库,c#,asp.net,asp.net-mvc,asp.net-core,C#,Asp.net,Asp.net Mvc,Asp.net Core,是否可以使用.NET Core 2.1类库中的配置之类的项登录到数据库 我设法使用NLog为.NETMVC5构建了一个工作版本。然而,当涉及到.NET Core 2.1时,在Startup.cs和Program.cs中将其设置为服务是一种依赖 实际上,我在另一篇文章中问过这个问题,但这篇文章只是为了得到一个指南或教程的推荐,看看它是否可行 这是我展示NLog代码和配置的另一篇文章 特别是在类库中,您应该使用日志记录fascade,如Microsoft.Extensions.logging,而不是

是否可以使用.NET Core 2.1类库中的配置之类的项登录到数据库

我设法使用NLog为.NETMVC5构建了一个工作版本。然而,当涉及到.NET Core 2.1时,在Startup.cs和Program.cs中将其设置为服务是一种依赖

实际上,我在另一篇文章中问过这个问题,但这篇文章只是为了得到一个指南或教程的推荐,看看它是否可行

这是我展示NLog代码和配置的另一篇文章

特别是在类库中,您应该使用日志记录fascade,如Microsoft.Extensions.logging,而不是具体的日志记录提供程序,如NLog。然后,只需将日志fascade注入类库类,如:

public class Foo
{
    private readonly ILogger _logger;

    public Foo(ILogger<Foo> logger)
    {
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
    }

    ...
}
公共类Foo
{
专用只读ILogger\u记录器;
公共Foo(ILogger记录器)
{
_logger=logger??抛出新的ArgumentNullException(name of(logger));
}
...
}

然后,在类内部,使用设置为
\u logger
ivar的注入日志实例。然后,在使用该类的实际项目中,设置日志提供者并注册适当的服务。这样,每个应用程序都控制自己的日志提供程序,而您的类库类只使用抽象。

特别是在类库中,您应该使用日志fascade,如Microsoft.Extensions.logging,而不是具体的日志提供程序,如NLog。然后,只需将日志fascade注入类库类,如:

public class Foo
{
    private readonly ILogger _logger;

    public Foo(ILogger<Foo> logger)
    {
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
    }

    ...
}
公共类Foo
{
专用只读ILogger\u记录器;
公共Foo(ILogger记录器)
{
_logger=logger??抛出新的ArgumentNullException(name of(logger));
}
...
}

然后,在类内部,使用设置为
\u logger
ivar的注入日志实例。然后,在使用该类的实际项目中,设置日志提供者并注册适当的服务。这样,每个应用程序都控制自己的日志提供者,而您的类库类只使用抽象。

这是因为MVC 5逻辑也是错误的。控制器不应该直接调用记录器。即使在MVC5中,记录器也应该作为抽象依赖项提供,例如作为控制器构造函数中的
ILog
接口参数。这是因为MVC5逻辑也是错误的。控制器不应该直接调用记录器。即使在MVC 5中,记录器也应作为抽象依赖项提供,例如作为控制器构造函数中的
ILog
接口参数。抱歉,我只想澄清一下,这是否意味着如果我的应用程序被拆分为app.UI、app.Data、app.ClassLibrary,并且我想登录app.UI和app.Data,我必须设置单独的配置(连接字符串等)对于每个模块?同样,如果App.Data没有Startup.cs或appsettings.json会发生什么?不。这就是重点。您可以在正在运行的实际应用程序中设置日志记录,也就是说,
App.UI
。您的所有代码都只需使用a logging fascade,它将针对您的runn中的实际提供者进行设置嗯,我明白了。但是如果我的数据层发生异常,UI层会知道吗?对不起,我对.net还是很陌生。是的,基本上。只有一个正在运行的应用程序。其他项目只是依赖项。这意味着它们的代码被编译到正在运行的应用程序的代码中,就像它存在于其中一样直接创建项目。将其拆分为单独的项目是为了组织,它们不会独立运行。抱歉,我只是想澄清一下,这是否意味着如果我的应用被拆分为app.UI、app.Data、app.ClassLibrary,并且我想登录app.UI和app.Data,我就必须设置单独的配置(连接字符串等)对于每个模块?同样,如果App.Data没有Startup.cs或appsettings.json会发生什么?不。这就是重点。您可以在正在运行的实际应用程序中设置日志记录,也就是说,
App.UI
。您的所有代码都只需使用a logging fascade,它将针对您的runn中的实际提供者进行设置嗯,我明白了。但是如果我的数据层发生异常,UI层会知道吗?对不起,我对.net还是很陌生。是的,基本上。只有一个正在运行的应用程序。其他项目只是依赖项。这意味着它们的代码被编译到正在运行的应用程序的代码中,就像它存在于其中一样直接项目。将其分解为单独的项目是为了组织,它们不会独立运行。