[英]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>
。 相反,我在下面发布了我的解决方法作为解决方案。
原来我不得不以不同的方式解决我的问题:
XunitLogger
复制 我创建了一个通用版本:
public class XunitLogger<T> : XunitLogger, ILogger<T> { public XunitLogger(ITestOutputHelper output) : base(output, typeof(T).Name, LogLevel.Information) { } }
我注册了测试输出帮助器和记录器:
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.