Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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# Microsoft扩展日志的生存期_C#_Asp.net Core_Asp.net Core 2.0 - Fatal编程技术网

C# Microsoft扩展日志的生存期

C# Microsoft扩展日志的生存期,c#,asp.net-core,asp.net-core-2.0,C#,Asp.net Core,Asp.net Core 2.0,我目前正在编写一个小包装器,其界面是“Microsoft.Extensions.Logging” 这样做的主要原因是我不能将FakeiTasy与诸如“LogWarning”之类的扩展方法一起使用 以下是一个小样本: public interface ILoggerWrapper<out T> { void LogWarning(string message, params object[] args); void LogWarning(Exception except

我目前正在编写一个小包装器,其界面是“Microsoft.Extensions.Logging”

这样做的主要原因是我不能将FakeiTasy与诸如“LogWarning”之类的扩展方法一起使用

以下是一个小样本:

public interface ILoggerWrapper<out T>
{
    void LogWarning(string message, params object[] args);
    void LogWarning(Exception exception, string message, params object[] args);
}

public class MicrosoftLoggerWrapper<T> : ILoggerWrapper<T>
{
    private readonly ILogger<T> _logger;

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

    public void LogWarning(string message, params object[] args)
    {
        _logger.LogWarning(message, args);
    }
}
公共接口
{
无效日志警告(字符串消息,参数对象[]args);
无效日志警告(异常、字符串消息、参数对象[]args);
}
公共类MicrosoftLoggerWrapper:ILoggerWrapper
{
专用只读ILogger\u记录器;
公共MicrosoftLoggerWrapper(ILogger记录器)
{
_记录器=记录器;
}
public void LogWarning(字符串消息,参数对象[]args)
{
_logger.LogWarning(消息,args);
}
}
现在我想知道这个记录器的生命周期以及“Microsoft.Extensions.Logging”的生命周期。它是单例还是作用域

我应该如何在ServiceCollection中注册包装器?现在我是这样做的:

services.AddSingleton(typeof(ILoggerWrapper<>), typeof(MicrosoftLoggerWrapper<>));
services.AddSingleton(typeof(ILoggerWrapper),typeof(MicrosoftLoggerWrapper));

这是单例(证明:)顺便说一句,您不需要模拟扩展方法。您只需要模拟
ILogger
interface-
void Log(LogLevel LogLevel,EventId EventId,TState state,Exception Exception,Func formatter)中的一个方法。所有扩展方法都使用此方法,因此模拟扩展方法毫无意义。^this。模拟
Log
方法。无论如何,那样更容易。Microsoft.Extensions.Logging已经是一个日志抽象。不要在它周围创建一个完整的另一个。