【发布时间】:2019-03-26 02:13:54
【问题描述】:
我已经像这样配置了我的控制台应用程序的Main
var services = new ServiceCollection()
.AddLogging(logging => logging.AddConsole())
.BuildServiceProvider();
然后我尝试在另一个类中使用它
private readonly ILogger _logger;
public MyClass(ILogger logger)
{
_logger = logger;
}
public void MyFunc()
{
_logger.Log(LogLevel.Error, "My Message");
}
System.InvalidOperationException: '无法解析服务类型 'Microsoft.Extensions.Logging.ILogger'
我已经尝试了here 的解决方案,但它对我不起作用。
编辑 根据下面 Yaakov 的评论和this Github comment,我可以通过这样做正确解决它
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
}
我本来希望在最初的 BuildServiceProvider 中有这个,但看起来我每次想使用记录器(或创建我自己的 ILogger)时都必须重复这个。
【问题讨论】:
-
那么您注册服务集合的部分在哪里?
-
@EmrahSüngü 我不认为我是单独做的。在
..AddLogging(logging => logging.AddConsole())之后,我在该链中还有其他解析器,例如正确解析的.AddScoped<IMyInterface, MyMethod>()。 -
如果您尝试解析
ILogger<MyClass>是否有效? -
@yaakov 是的,确实如此。但是有没有其他方法可以注册,这样我就不必每次都做
public MyClass(ILogger<MyClass> logger)? -
我不知道。我相信它的设计方式是让 DI 还添加有关从何处记录数据的信息。
标签: c# .net dependency-injection .net-core ilogger