繁体   English   中英

使用LightInject,如何使用工厂方法注册通用服务?

[英]Using LightInject, how can I register a generic service with a factory method?

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

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

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

如何使用LightInject实现相同目的?

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

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

  1. 我从Microsoft.Extensions.Logging.Testing通过XunitLogger复制
  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> 现在,消息已记录到我的测试输出中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM