0

我想配置一个记录到 xUnit 测试输出的记录器,并且应该替换所有ILogger<T>依赖项。据我所知,解决这个问题的方法是使用带有工厂方法的通用服务。

使用时Microsoft.Extensions.DependencyInjection,我可以执行以下操作:

services.AddTransient(typeof(ILogger<>), 
  factory => factory.GetRequiredService<LoggerFactory>().CreateLogger("TestLogger"));

如何使用 LightInject 实现相同的效果?

编辑:我的示例不起作用,因为创建的记录器无法转换为ILogger<T>. 相反,我在下面发布了我的解决方法作为解决方案。

4

1 回答 1

0

原来我必须以不同的方式解决我的问题:

  1. XunitLogger我从Microsoft.Extensions.Logging.Testing复制过来
  2. 我创建了一个通用版本:

    public class XunitLogger<T> : XunitLogger, ILogger<T>
    {
        public XunitLogger(ITestOutputHelper output) : base(output, typeof(T).Name, LogLevel.Information)
        {
        }
    }
    
  3. 我注册了测试输出助手和记录器:

    public TestBase(ITestOutputHelper testOutputHelper)
    {
        Container.RegisterInstance(testOutputHelper);
        Container.Register(typeof(ILogger<>), typeof(XunitLogger<>));
    }
    

这里的关键是ILogger<T>必须由泛型类来实现,例如XunitLogger<T>. 现在消息被记录到我的测试输出中。

于 2018-04-25T09:27:33.630 回答